2010-09-02 165 views
2

C++:紅寶石環路問題

for(i=0,j=0;i<0;i++,j++) 

什麼是等價按此在紅寶石?

除了在C++中看到的正常for,while循環。有人可以從Ruby的其他特殊循環命名嗎?如.times.each

在此先感謝。

+6

'i <0'?你確定? – Skilldrick 2010-09-02 21:10:51

+0

如果您在示例循環中提供了所有代碼,您可能會得到更有幫助的答案。 – 2010-09-03 00:02:55

回答

5

紅寶石是C++不同。在C++中,你通過什麼用一個for循環迴路,但在Ruby中,你會發現你通常是通過一個枚舉對象循環,所以它是更常見的是做這樣的事情:

monkeys.each do |monkey| 
    monkey.say 'ow!' 
end 

不要試圖在兩種語言之間尋找太多的等價性 - 它們是爲不同的事物而建立的。顯然有很多等價的東西,但是你不能通過生成一個顯示C++代碼的圖表和另一個顯示C++代碼來學習Ruby。嘗試學習做事的慣用方式,你會發現更容易。

如果您想要通過可枚舉對象循環的方法,請查看Module: Enumerable中的所有方法:all? any? collect detect each_cons each_slice each_with_index entries enum_cons enum_slice enum_with_index find find_all grep include? inject inject map max member? min partition reject select sort sort_by to_a to_set zip。使用這些方法中的大多數,您可以使用for循環來執行C++中的等效事情。

+0

如果你使用的是字符串,每種方法更多 - 'each_char'和'each_line'通常很方便。 – 2010-09-02 21:15:52

+0

'each_with_index'是另一個很棒的:) – Skilldrick 2010-09-02 21:18:35

3

你可以這樣做:

(0..j).each do |i| 
    puts i 
end 
2

我不是非常熟悉C++,但AFAICS,相當於Ruby代碼到您發佈的循環很簡單:

i, j = 0, 0 

這再次顯示了表現力Ruby有。 任何人都可以弄清楚這是什麼,即使他以前從未見過Ruby,而等價的C++需要相當長的一段時間才能發現。

+0

+1是一個smartass ;-) – sepp2k 2010-09-02 21:28:06

+0

有些人(不是我)可以看到它作爲三元組,在中間有一個情感,所以我更喜歡括號內的版本[i ,j] = [0,0] – mb14 2010-09-10 14:25:31

+0

@ mb14:那將是'(i,j)= [0,0]',但是,這是一個很好的觀點。 – 2010-09-10 17:35:48

9

如果我理解你的問題(至少是第一部分),你想知道如何在同一時間迭代兩個單獨的變量,如ij

您可以使用具有多個變量的for循環在Ruby中執行此操作。舉例來說,如果你想i從1數到10,並j10數到20,你可以這樣做:

for i, j in (1..10).zip(10..20) 
    puts "#{i}, #{j}" 
end 

zip會產生,來自兩個陣列,單個陣列中的每個元素是一個數組,與來自相應位置的第一陣列中所採取的第一個元素,和從相應的位置上的第二陣列中所採取的第二要素:

> [1, 2, 3].zip([4, 5, 6]) 
=> [[1, 4], [2, 5], [3, 6]] 

而在你for循環使用i, j將採取來自每個內部陣列的第一個元素的,以及來自第二個元素的j

如果你想用each不是for,你可以只使用一個塊有兩個參數:

(1..10).zip(10..20).each { |i, j| puts "#{i}, #{j}" } 

關於你問題的第二部分,林心如並沒有真正有一個固定數量不同的迭代器,因爲大多數迭代是通過將一個塊傳遞給一個方法來完成的,因此任何類都可以定義自己的方法來允許迭代自己的內容。最常見的是each,定義each方法的任何類都可以混合使用Enumerable類,該類提供了多種用於遍歷元素,選擇元素,過濾等的不同方法。也有timesuptodownto上定義的Integer類,each_keyeach_valueeach_pairHasheach_byteeach_chareach_lineString,等等。幾乎任何定義某種集合或序列的類都有迭代所述集合或序列的方法。

+0

+1非常好,徹底:) – Skilldrick 2010-09-03 08:04:18