17

像这样

range = (0..10)

我怎样才能得到这样的号码:

0 5 10 

每次加 5 但少于 10

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

0 5 10 15 20
4

3 回答 3

28

尝试使用.step()来完成给定的步骤。

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

给...

0 5 10 15 20

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

于 2010-04-06T09:10:29.207 回答
4

就像 Dav 说的,但是添加到_a:

(0..20).step(5).to_a # [0, 5, 10, 15, 20]
于 2010-04-06T09:12:58.373 回答
2

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

只需考虑:

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

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

也许你会喜欢这样的东西(0..3).map{|i| i*5}

但是坚持步骤方法的结果 .to_a 也应该可以正常工作

于 2010-04-06T09:08:36.400 回答