所以我遍歷一個範圍,像這樣:Ruby:如何遍歷一個範圍,但以設置的增量?
(1..100).each do |n|
# n = 1
# n = 2
# n = 3
# n = 4
# n = 5
end
但我想要做的是10的迭代。
所以增加1 n
代替,未來n
實際上是10,那麼20,30,等等等等
所以我遍歷一個範圍,像這樣:Ruby:如何遍歷一個範圍,但以設置的增量?
(1..100).each do |n|
# n = 1
# n = 2
# n = 3
# n = 4
# n = 5
end
但我想要做的是10的迭代。
所以增加1 n
代替,未來n
實際上是10,那麼20,30,等等等等
爲完整的API見http://ruby-doc.org/core/classes/Range.html#M000695。
基本上你使用step()
方法。例如:
(10..100).step(10) do |n|
# n = 10
# n = 20
# n = 30
# ...
end
這個答案把我帶到我正在尋找的東西......如果你有兩次,你可以做`(time1..time2).step(15.minutes)do | time |` – daybreaker 2014-01-18 20:11:48
rng.step(n=1) {| obj | block } => rng
迭代過毫克,每第n個元素傳遞給該塊。如果範圍包含數字或字符串,則使用自然排序。否則,步驟調用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
對不起,但是ruby風格指南強烈地阻止使用`for`循環。 – Fuser97381 2015-04-10 16:58:33
可能重複 http://stackoverflow.com/questions/2583665/about-ruby-range – 2010-12-03 14:17:40