Ruby:如何迭代一个范围,但是以增量为单位?

时间:2010-12-03 14:10:46

标签: ruby iterator increment

所以我在这样的范围内迭代:

(1..100).each do |n|
    # n = 1
    # n = 2
    # n = 3
    # n = 4
    # n = 5
end

但我想做的是迭代10秒。

因此,不是将n增加1,而是下一个n实际上是10,然后是20,30等等。

4 个答案:

答案 0 :(得分:232)

有关完整的API,请参阅http://ruby-doc.org/core/classes/Range.html#M000695

基本上你使用step()方法。例如:

(10..100).step(10) do |n|
    # n = 10
    # n = 20
    # n = 30
    # ...
end

答案 1 :(得分:9)

您可以使用Numeric#step

0.step(30,5) do |num|
  puts "number is #{num}"
end
# >> number is 0
# >> number is 5
# >> number is 10
# >> number is 15
# >> number is 20
# >> number is 25
# >> number is 30

答案 2 :(得分:5)

rng.step(n=1) {| obj | block } => rng

迭代rng,将每个第n个元素传递给块。如果范围包含数字或字符串,则使用自然排序。否则,步骤调用succ来遍历范围元素。以下代码使用类Xs,它在类级文档中定义。

range = Xs.new(1)..Xs.new(10)
range.step(2) {|x| puts x}
range.step(3) {|x| puts x}

产生

1 x
3 xxx
5 xxxxx
7 xxxxxxx
9 xxxxxxxxx
1 x
4 xxxx
7 xxxxxxx
10 xxxxxxxxxx

参考:http://ruby-doc.org/core/classes/Range.html

...

答案 3 :(得分:4)

这是另一种,或许更熟悉的方式:

for i in (0..10).step(2) do
    puts i
end