C++:紅寶石環路問題
for(i=0,j=0;i<0;i++,j++)
什麼是等價按此在紅寶石?
除了在C++中看到的正常for
,while
循環。有人可以從Ruby的其他特殊循環命名嗎?如.times
? .each
?
在此先感謝。
C++:紅寶石環路問題
for(i=0,j=0;i<0;i++,j++)
什麼是等價按此在紅寶石?
除了在C++中看到的正常for
,while
循環。有人可以從Ruby的其他特殊循環命名嗎?如.times
? .each
?
在此先感謝。
紅寶石是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++中的等效事情。
如果你使用的是字符串,每種方法更多 - 'each_char'和'each_line'通常很方便。 – 2010-09-02 21:15:52
'each_with_index'是另一個很棒的:) – Skilldrick 2010-09-02 21:18:35
你可以這樣做:
(0..j).each do |i|
puts i
end
我不是非常熟悉C++,但AFAICS,相當於Ruby代碼到您發佈的循環很簡單:
i, j = 0, 0
這再次顯示了表現力Ruby有。 任何人都可以弄清楚這是什麼,即使他以前從未見過Ruby,而等價的C++需要相當長的一段時間才能發現。
如果我理解你的問題(至少是第一部分),你想知道如何在同一時間迭代兩個單獨的變量,如i
和j
。
您可以使用具有多個變量的for
循環在Ruby中執行此操作。舉例來說,如果你想i
從1數到10,並j
從10
數到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
類,該類提供了多種用於遍歷元素,選擇元素,過濾等的不同方法。也有times
,upto
和downto
上定義的Integer
類,each_key
,each_value
,each_pair
上Hash
,each_byte
,each_char
,each_line
上String
,等等。幾乎任何定義某種集合或序列的類都有迭代所述集合或序列的方法。
+1非常好,徹底:) – Skilldrick 2010-09-03 08:04:18
'i <0'?你確定? – Skilldrick 2010-09-02 21:10:51
如果您在示例循環中提供了所有代碼,您可能會得到更有幫助的答案。 – 2010-09-03 00:02:55