关于红宝石系列?

时间:2010-04-06 09:01:59

标签: ruby range each

像这样

range = (0..10)

我怎么能得到这样的数字:

0 5 10 

每次加5次但不到10次

如果range =(0..20)那么我应该得到这个:

0 5 10 15 20

3 个答案:

答案 0 :(得分:25)

尝试使用.step()完成指定步骤。

(0..20).step(5) do |n|
    print n,' '
end

...给出

0 5 10 15 20

正如dominikh所述,您可以在最后添加.to_a以获取可存储的数字列表形式:(0..20).step(5).to_a

答案 1 :(得分:4)

像戴夫说的那样,但是加上to_a:

(0..20).step(5).to_a # [0, 5, 10, 15, 20]

答案 2 :(得分:2)

http://ruby-doc.org/core/classes/Range.html中描述的step方法可以完成这项工作,但严重危害 可能会损害的可读性。

考虑一下:

(0..20).step(5){|n| print ' first ', n }.each{|n| print ' second ',n }

您可能认为步骤(5)会产生一个新的范围,就像_ 问题最初的意图一样。但是如果要“重用”0-5-10-15-20范围,则每个都在(0..20)上调用并且必须由另一个步骤(5)替换。

也许你可以使用像(0..3).map{|i| i*5}这样的东西?

持久使用 .to_a 的步骤方法的结果也应该正常