2010-12-03 70 views
122

所以我遍歷一個範圍,像這樣:Ruby:如何遍歷一個範圍,但以設置的增量?

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

但我想要做的是10的迭代。

所以增加1 n代替,未來n實際上是10,那麼20,30,等等等等

+1

可能重複 http://stackoverflow.com/questions/2583665/about-ruby-range – 2010-12-03 14:17:40

回答

217

爲完整的API見http://ruby-doc.org/core/classes/Range.html#M000695

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

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

這個答案把我帶到我正在尋找的東西......如果你有兩次,你可以做`(time1..time2).step(15.minutes)do | time |` – daybreaker 2014-01-18 20:11:48

5
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

......

6

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

下面是另一個,或許更熟悉的前瞻性的方式來做到這一點:

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

對不起,但是ruby風格指南強烈地阻止使用`for`循環。 – Fuser97381 2015-04-10 16:58:33