所以我在这样的范围内迭代:
(1..100).each do |n|
# n = 1
# n = 2
# n = 3
# n = 4
# n = 5
end
但我想做的是迭代10秒。
因此,不是将n
增加1,而是下一个n
实际上是10,然后是20,30等等。
答案 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