(1...4)
是一个范围。在Ruby中,范围不像数组;它们的优势之一是可以创建如下范围:
(1..1e9)
不占用计算机所有的内存。此外,您可以创建此范围:
r = (1.0...4.0)
这意味着“所有浮点数的集合从1.0到4.0,包括1.0但不包括4.0”。
换句话说:
irb(main):013:0> r.include? 3.9999
=> true
irb(main):014:0> r.include? 3.99999999999
=> true
irb(main):015:0> r.include? 4.0
=> false
您可以将整数范围转换为数组:
irb(main):022:0> (1..4).to_a
=> [1, 2, 3, 4]
但不是浮点数范围:
irb(main):023:0> (1.0...4.0).to_a
TypeError: can't iterate from Float
from (irb):23:in `each'
from (irb):23:in `to_a'
from (irb):23
from /home/mslade/rubygems1.9/bin/irb:12:in `<main>'
由于没有自然的方法可以迭代浮点数。因此,您需要使用
#step
:
irb(main):015:0> (1..4).step(0.5).to_a
=> [1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0]
irb(main):016:0> (1...4).step(0.5).to_a
=> [1.0, 1.5, 2.0, 2.5, 3.0, 3.5]
如果您需要反向迭代一个大整数范围,请使用
Integer#downto
。
('1.0'...'4.0').to_a.map(&:to_f)
怎么样? - Grzegorz Łuszczekto_a.map
并得到字符串的枚举器。 - Grzegorz Łuszczek