关于红宝石系列?

why*_*hy_ 16 ruby each range

像这样

range = (0..10)
Run Code Online (Sandbox Code Playgroud)

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

0 5 10 
Run Code Online (Sandbox Code Playgroud)

每次加5次,但不到10次

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

0 5 10 15 20
Run Code Online (Sandbox Code Playgroud)

Amb*_*ber 25

尝试使用.step()在给定步骤中完成.

(0..20).step(5) do |n|
    print n,' '
end
Run Code Online (Sandbox Code Playgroud)

给...

0 5 10 15 20
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你想存储你可以使用的数字(0..10).step(5).to_a - 这需要ruby> = 1.8.7.另一种选择是0.step(10,5).to_a,它还需要ruby> = 1.8.7 (3认同)

efi*_*efi 2

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

只要考虑一下:

(0..20).step(5){|n| print ' first ', n }.each{|n| print ' second ',n }
Run Code Online (Sandbox Code Playgroud)

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

也许你会对类似的事情感到满意(0..3).map{|i| i*5}

坚持步骤方法的结果 .to_a 也应该很好

  • 我认为该步骤比这种性质的地图更具可读性,至少在这种情况下是这样。 (3认同)