Ruby基本数据类型

6 分钟阅读

Ruby数据类型有:字符串、数字、数组、区间、散列、正则表达式。

数字

数字 描述
1_345 1345
1e3 1000.0
1.0e3 1000.0
012 10(八进制)
0x12 18(十六进制)
0b11 3(二进制)
2.to_s "2"

字符串

字符串 描述
str="" 空字符串
"a"+"bc" "abc"
"a"<<"bc" "abc"
"a"<<0x30 "a0"
"ab"*3 "ababab"
x=5;"x=#{x}" "x=5"
x=5;"x=#{x*10}" "x=50"
x=5;'x=#{x}' "x=#{x}"
65.chr "A"
"A".ord 65
"0x%x"%65 "0x41"
"1234567[2] "3"
"1234567[2,3] "345"
"1234567[-1] "7"
"123".to_i 123
"123".to_f 123.0
str.upcase 返回大写字符串
str.upcase! str被修改
str.downcase 返回小写字符串
str.downcase! str被修改
str.strip 去掉前尾空格
str.strip! str被修改
str.chomp str移除尾部换行
str.chomp! str被修改
str.empty? 是否为空
str.eql?(other) 是否相等
str.encoding 编码,比如UTF-8
  • 单引号不转义,单引号内的单引号用\'表示

  • 中文支持,需要开头添加# -*- coding: UTF-8 -*-或者#encoding: utf-8,且文件编码为utf-8

    #!/usr/bin/ruby -w
    # -*- coding: UTF-8 -*-
    puts "你好" #你好
    puts "abc".encoding #UTF-8
    puts (/abc/).encoding #US-ASCII
    puts (/abc/u).encoding #UTF-8
    puts "用于中文测试".match(/[\u4e00-\u9fa5]+/) #用于中文测试
    

数组

数组 描述
["OK",[1,2]] 可包含各类成员
["f"]<<2 ["f",2]
["f"]+[2] ["f",2]
["f"]<<[2] ["f",[2]]
array=[] 空数组
array=Array.new(20) 含20个空元素
array=Array.new(20,"ab") 含20个”ab”元素
array.size 元素个数,length,count相同
array.to_s 转换成字串
array[0] 第0个元素
array.clear 清空数组
array.delete("ab") 删除所有内容为”ab”的元素
array.delete_at(2) 删除第2个元素(0开始)
array.empty? 如果为空,返回true
array.include?("ab") 如果包含”ab”,返回true
array.grep /regex/ 匹配正则,返回数组
array.each{ |item| block} 遍历元素内容
array.each_index{ |index| block } 按Index遍历

区间

months = 1..12 闭区间[1,12]
1...12 开区间[1,12)
months.each{|index| block} 按区间内容遍历

散列

myhash={} 定义空散列
myhash={"name"=>"hu","age"=>25} key=>value
myhash["age"] 25
myhash["age"]=23 23
myhash["weight"]=120 添加"weight"=>120
myhash[:height]=1.7 添加:height=>1.7
myhash.delete("weight") 去掉"weight"=>120
myhash.keys ["name","age",:height]
myhash.key?("age") yes
myhash.has_value?("hu") 是否存在给定的值
myhash.empty? 是否空
myhash.inspect 散列的字符串形式
myhash.each{|key,value| block} 传递key和value
myhash.each_key{|key| block} 传递key
myhash.each_value{|value| block} 传递value
myhash.sort 按key值从小到大排序,返回副本,不会修改自身
myhash.sort{|k1,k2| k1 <=> k2} 按key值从小到大排序,返回副本,不会修改自身

正则表达式

1. 定义

reg = /http:\/\// #能匹配http:// reg = %r(http://) #同上,不需要转义 var = "http://"; reg = /#{var}/ #支持变量,且不用转义 规则参见正则表达式快速参考

2. 匹配

  • =~ 如果匹配,返回匹配位置,否则返回nil 如:">>http://www.baidu.com" =~ reg #返回2 如:">>www.baidu.com" =~ reg #返回nil

  • !~ 如果匹配,返回false,否则返回true 如:">>http://www.baidu.com" !~ reg #返回false 如:">>www.baidu.com" =~ reg #返回true

  • str.match(regex) 返回匹配的字符串;否则nil 如:">>http://www.baidu.com".match(reg) #返回http:// 如:">>www.baidu.com".match(reg) #返回nil

  • str.scan(regex) 返回所有匹配字符串以数组保存 如:"I love my home".scan(/\w*o\w*/) #返回[“love”,”home”] 如:"I love my home".scan(/family/) #返回[]

  • str.scan(regex){...} 块操作 如:"I love my home".scan(/\w*o\w*/){print $&.upcase} #打印LOVEHOME

3. 替换

  • str.sub(regex,replace) 替换第一个匹配,\1、\2…表示匹配的子字串 如:"I love my home".sub(/home/,"family") #返回I love my family

  • str.gsub(regex,replace) 替换所有匹配 如:"I love my home".gsub(/\b\w/,"I") #返回I Iove Iy Iome

  • sub和gsub都可以使用块操作,块内$&表示匹配字串,$1/$2/..表示匹配子字串 如:"I love my home".gsub(/\b\w/){$&.upcase} #返回I Love My Home

  • sub!和gsub!表示变量本身也会因替换而改变