2010-01-09 88 views
57

如何在Ruby中執行這種for循環類型?Ruby中for循環的語法

for(int i=0; i<array.length; i++) { 

} 
+0

@johannes讀一本書,是一個好主意,但最好不要一個關於Ruby 1.6! – 2012-04-10 01:12:46

+0

不要忘記在[ruby-doc:Enumerable module](http://www.ruby-doc.org/core/classes/Enumerable.html)中查看一些有用的方法。 – 2015-03-23 07:20:52

回答

87
array.each do |element| 
    element.do_stuff 
end 

for element in array do 
    element.do_stuff 
end 

如果你需要索引,您可以使用此:

array.each_with_index do |element,index| 
    element.do_stuff(index) 
end 
+10

我正在尋找一個循環索引,這些解決方案都沒有立即明確如何做到這一點。 op在代碼中背叛了array.length的意圖... – jheriko 2013-11-01 17:15:18

+4

仔細閱讀我的答案。有一個包含索引的循環解決方案。 – Eimantas 2013-11-05 08:18:37

+0

是否永遠在那裏?它跳出來咬我的鼻子... – jheriko 2013-11-27 02:53:41

3
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"} 
13
array.each_index do |i| 
    ... 
end 

這不是很Rubyish,但它是最好的方式做for循環從問題中的Ruby

+0

這太棒了。確實,答案不是「each」,而是「each_index」。 +1 – 2011-09-23 12:40:57

60
limit = array.length; 
for counter in 0..limit 
--- make some actions --- 
end 

其他的方法來做到了下面

3.times do |n| 
    puts n; 
end 

這就是將打印0,1,2,因此可以像使用數組迭代器也

認爲該變體更適合作者的需求

7

什麼?從2010年,沒有人提到Ruby有罰款/ in循環(它只是沒有人使用它):

ar = [1,2,3,4,5,6] 
for item in ar 
    puts item 
end 
+5

* .each ... do *的一個優點是,在循環結束時塊暫時超出範圍,而* for ... in *則將範圍內的臨時範圍保留。 – 2013-08-16 13:44:51

7

如果不需要訪問陣列,(只是一個簡單的for循環),你可以使用upto或每個:

高達:

1.9.3p392 :030 > 2.upto(4) {|i| puts i} 
2 
3 
4 
=> 2 

每個:

1.9.3p392 :031 > (2..4).each {|i| puts i} 
2 
3 
4 
=> 2..4 
24

我一直把它作爲谷歌「ruby for loop」的頂級鏈接,所以我想爲循環添加一個解決方案,其中的步驟不僅僅是'1'。對於這些情況,您可以使用Numerics和Date對象上存在的'step'方法。我認爲這是一個'for'循環的近似值。

start = Date.new(2013,06,30) 
stop = Date.new(2011,06,30) 
# step back in time over two years, one week at a time 
start.step(stop, -7).each do |d| 
    puts d 
end 
+1

+1,謝謝我正在尋找倒計時的好方法.. – 2013-09-14 03:38:40

9

迭代一個循環的固定次數,嘗試:

n.times do 
    #Something to be done n times 
end 
+2

這個工作時需要使用索引:3.times do | i | – tobixen 2013-11-16 07:31:40

0

Ruby的枚舉循環語法是不同的:

collection.each do |item| 
... 
end 

該讀作「一個電話到「每'數組對象實例'集合'的方法,該方法以'blockargument'作爲參數。 Ruby中的塊語法是用於單行語句的'do ... end'或'{...}'。

塊參數'| item |'是可選的,但如果提供,第一個參數自動錶示循環枚舉項目。

5

等價會

for i in (0...array.size) 
end 

(0...array.size).each do |i| 
end 

i = 0 
while i < array.size do 
    array[i] 
    i = i + 1 # where you may freely set i to any value 
end