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

Shp*_*ord 147 ruby iterator increment

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

(1..100).each do |n|
    # n = 1
    # n = 2
    # n = 3
    # n = 4
    # n = 5
end
Run Code Online (Sandbox Code Playgroud)

但我想做的是迭代10.

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

Ber*_*sch 242

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

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

(10..100).step(10) do |n|
    # n = 10
    # n = 20
    # n = 30
    # ...
end
Run Code Online (Sandbox Code Playgroud)

  • 这个答案让我得到了我所寻找的......如果你有两次,你可以做`(time1..time2).step(15.minutes)do | time |` (9认同)

Aru*_*hit 11

你可以用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
Run Code Online (Sandbox Code Playgroud)


Jah*_*ine 5

rng.step(n=1) {| obj | block } => rng
Run Code Online (Sandbox Code Playgroud)

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

range = Xs.new(1)..Xs.new(10)
range.step(2) {|x| puts x}
range.step(3) {|x| puts x}
Run Code Online (Sandbox Code Playgroud)

生产:

1 x
3 xxx
5 xxxxx
7 xxxxxxx
9 xxxxxxxxx
1 x
4 xxxx
7 xxxxxxx
10 xxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

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

......


小智 5

这是另一种可能看起来更熟悉的方法:

for i in (0..10).step(2) do
    puts i
end
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,但是红宝石样式指南强烈建议不要使用“ for”循环。 (10认同)