Ruby: 如何在一个范围内迭代,但是以集增量的形式?

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

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

但我想做的是迭代10次。

所以不是增加 n1,下一个 n实际上是10,然后20,30,等等。

152731 次浏览

请参阅 http://ruby-doc.org/core/classes/Range.html#M000695了解完整的 API。

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

(10..100).step(10) do |n|
# n = 10
# n = 20
# n = 30
# ...
end
rng.step(n=1) {| obj | block } => rng

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

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

......

你可以使用 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

下面是另一种看起来更熟悉的方法:

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