Ruby 数据类型
数值类型(Number)
整型(Integer)
浮点型
字符串类型
Ruby 字符串 | 8 位字节序列 | String 类的对象 |
---|
双引号标记的字符串 | 单引号标记的字符串 | 注意 |
---|---|---|
不限 | 只允许使用 \ 和 ’ 两个反斜线符号 | |
%Q{Ruby 的字符串} | %q |Ruby 的字符串| | 注:分界符可以是任意一个非字母数字的单字节字符.如:[,{,(,<,!等 |
#{ expr } 把任意 Ruby 表达式的值替换为一个字符串 | ||
字符串中嵌入变量 eg :“你好 #{name1}” “x 的值为 #{ 1 + 2 }” | ||
字符串内建方法 eg :puts “#{foo}” | myStr = String.new(“THIS IS TEST”) foo = myStr.downcase |
数组
Ruby 数组可存储诸如 String、 Integer、 Fixnum、 Hash、 Symbol 等对象,甚至可以是其他 Array 对象。
Ruby 数组不需要指定大小,当向数组添加元素时,Ruby 数组会自动增长
创建数组 | ||
---|---|---|
names = Array.new | ||
names = Array.new(20) | puts names.size puts names.length | 20 20 |
names = Array.new(4, “mac”) | puts “#{names}” | [“mac”, “mac”, “mac”, “mac”] |
nums = Array.new(10) { |e| e = e * 2 } | puts “#{nums}” | [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] |
nums = Array.[](1, 2, 3, 4,5) | ||
nums = Array[1, 2, 3, 4,5] | ||
digits = Array(0…9) | puts “#{digits}” | [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
哈希类型
哈希类似于一个数组,只不过它的索引不局限于使用数字 | |
---|---|
Hash 的索引(或者叫"键")几乎可以是任何对象 | |
Hash 的元素没有特定的顺序。 | 如果顺序很重要的话就要使用数组了 |
创建哈希 | |||
---|---|---|---|
months = Hash.new | 不带默认值的哈希是 nil | ||
months = Hash.new( “month” ) | 默认值 | puts “#{months[0]}” | month |
months = Hash.new “month” | 默认值 | ||
H = Hash[“a” => 100, “b” => 200] | puts “#{H[‘a’]}” | 100 | |
[1,“jan”] => “January” | 可以使用任何的 Ruby 对象作为键或值, 甚至可以使用数组 | ||
months = {“1” => “January”, “2” => “February”} | keys = months.keys | puts “#{keys}” | [“1”, “2”] |
范围类型
作为序列的范围
作为序列的范围 | ||
---|---|---|
(1…5) | 1, 2, 3, 4, 5 | |
(1…5) | 1, 2, 3, 4 | |
(‘a’…‘d’) | ‘a’, ‘b’, ‘c’, ‘d’ | |
range1 = (1…10).to_a | puts “#{range1}” | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
range2 = (‘bar’…‘bat’).to_a | puts “#{range2}” | [“bar”, “bas”, “bat”] |
(1..5) #==> 1, 2, 3, 4, 5
(1...5) #==> 1, 2, 3, 4
('a'..'d') #==> 'a', 'b', 'c', 'd'
range1 = (1..10).to_a
range2 = ('bar'..'bat').to_a
puts "#{range1}"
puts "#{range2}"
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
["bar", "bas", "bat"]
digits = 0…9 | ||
---|---|---|
puts digits.include?(5) | true | |
ret = digits.min | 0 | |
ret = digits.max | 9 | |
ret = digits.reject { |i| i < 5 } | [5, 6, 7, 8, 9] | |
digits.each do |digit| puts “在循环中 #{digit}” end | 在循环中 0 在循环中 1 在循环中 2 在循环中 3 在循环中 4 在循环中 5 在循环中 6 在循环中 7 在循环中 8 在循环中 9 |
# 指定范围
digits = 0..9
puts digits.include?(5)
ret = digits.min
puts "最小值为 #{ret}"
ret = digits.max
puts "最大值为 #{ret}"
ret = digits.reject {|i| i < 5 }
puts "不符合条件的有 #{ret}"
digits.each do |digit|
puts "在循环中 #{digit}"
end
true
最小值为 0
最大值为 9
不符合条件的有 [5, 6, 7, 8, 9]
在循环中 0
在循环中 1
在循环中 2
在循环中 3
在循环中 4
在循环中 5
在循环中 6
在循环中 7
在循环中 8
在循环中 9
作为条件的范围
score = 70
result = case score
when 0..40
"糟糕的分数"
when 41..60
"快要及格"
when 61..70
"及格分数"
when 71..100
"良好分数"
else
"错误的分数"
end
puts result
作为间隔的范围
检查指定值是否在指定的范围内
if ((1..10) === 5)
puts "5 在 (1..10)"
end
if (('a'..'j') === 'c')
puts "c 在 ('a'..'j')"
end
if (('a'..'j') === 'z')
puts "z 在 ('a'..'j')"
end
5 在 (1..10)
c 在 ('a'..'j')