2012-09-02 11 views
6

Dlaczego ten kod "blokuje" ruby? A jaki jest najlepszy sposób, aby go wyprzedzić? Poniżej zamieściłem moje rozwiązanie. Czy jest inny sposób na zrobienie tego? Z góry dziękuję!Dodawanie do tablicy podczas iteracji

Kod:

nums = [1, 2, 3] 
nums.each { |i| nums << i + 1 } 

Moje rozwiązanie:

nums = [1, 2, 3] 
adjustments = [] 
nums.each { |i| adjustments << i + 1 } 
nums += adjustments 

Odpowiedz

8

To dlatego, że każdy używa wyliczający (więc nigdy nie dobiegnie końca, jeśli trzymać dodając do niego).

Możesz zduplikować tablicę przed zastosowaniem każdej z nich.

nums = [1, 2, 3] 
nums.dup.each { |i| nums << i + 1 } 

Innym sposobem jest dołączenie dodatkowych elementów podanych przez mapy:

nums = [1, 2, 3] 
nums += nums.map { |i| i + 1 } 
+0

+1 Wow .. To ma teraz sens! Dzięki! – Dru

4
nums = [1, 2, 3] 
nums.each { |i| nums << i + 1 } 

możliwość dodawania do tablicy jak jesteś iteracji nad nim, więc nigdy nie zakończy wykonywanie.

+0

+1 Dzięki! Wcześniej nie nawiązałem połączenia. – Dru

Powiązane problemy