2012-07-18 19 views
2

如何以rubysh方式表示下一個循環?用於Ruby語言的C'for循環

for (r = 1; r < R; r++) { 
    for (i = 0; i < 4; i++) { 
      #do something 
      } 
} 

我想用優雅的ruby語法來表達上面的代碼。 在此先感謝。

+0

我永遠不會使用它。當它絕對必要時,我會使用while循環,因爲它是所有循環的「母體」。 – texasbruce 2012-07-18 06:27:55

回答

1

默認情況下,我會寫在Ruby中的方式是這樣的:

for r in 1..(R-1) do 
    for i in 0..3 do 
    # Do something 
    end 
end 

但更好的方法是取範圍功能的優勢,在他的回答中指出@PedroNascimento,使用三個點而不是兩個爲了留下最後一個項目超出範圍:

for r in 1...R do 
    for i in 0...4 do 
    # Do something 
    end 
end 

這兩個更好看,更明確地表達代碼的含義。

0
for r in 1..R-1 
     for i on 0..3 
      do something 
     end 
    end 

Here你可以找到更多Ruby的語法幫助。

+0

嗨,感謝您的回覆,但我不確定這是否與原始C代碼一樣,因爲1..R中的r等於(r = 0; r <= R; r ++)。我對麼 ? – agsalcedo 2012-07-18 06:10:02

+0

將「r」的值初始化爲0,它將按照您的需要工作。 – Murtaza 2012-07-18 06:13:43

+0

我的歉意。你可以用'R-1'替代'R',在第二個'for'用'3'代替'4'。 – Shahzeb 2012-07-18 06:13:55

4
1.upto(R-1) { |r| 
    4.times {|i| 
     # Do something 
    } 
} 

RubyFiddle

這是使用Integeruptotimes方法。

+0

請注意,這有兩個bug,並沒有做問題中的循環(它們每次運行一次)。 – 2012-07-18 17:03:12

+0

@DarshanComputing你是對的,會做出改變。 – alex 2012-07-18 23:33:49

0

只是使用Range的另一個答案。

r = 5 # 
(1..r-1).each do|i| 
    (1..3).each do |j| 
     puts "i => #{i} , j => #{j}" 
    end 
end 

此版本受@Pedro Nascimento的答案啓發。

r = 5 # 
(1...r).each do|i| 
    (1...3).each do |j| 
     puts "i => #{i} , j => #{j}" 
    end 
end 
1

只是爲了讓事情更漂亮:範圍也可以有三個點,不包括最後一個數字。所以,如果這樣寫代碼將更加密切:

for r in 1...R do 
    for i in 0...4 do 
    # Do something 
    end 
end 
+0

感謝您指出這一點;如果我知道三點範圍,我早已忘記了。我已經將其納入我的答案。 – 2012-07-18 06:49:17

+0

太棒了!這是我總是錯誤地使用三個點的功能之一,比記住你應該只使用兩個點。因此,我總是看到三點行爲! :) – 2012-07-18 14:18:06