2012-09-02 14 views
6

Perché questo codice "blocca" ruby? E qual è il modo migliore per superarlo? Ho pubblicato la mia soluzione qui sotto. c'è un altro modo per fare ciò? Grazie in anticipo!Aggiunta a una matrice durante l'iterazione

Codice:

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

La mia soluzione:

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

risposta

8

Questo perché ognuno utilizza un enumeratore (in modo che non raggiunge mai il finale, se si continuare ad aggiungere ad esso).

È possibile duplicare l'array prima di applicarli.

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

Un altro modo è quello di aggiungere gli elementi aggiuntivi forniti da mappa:

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

+1 Wow .. Questo ha assolutamente senso ora! Grazie! – Dru

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

Si sta aggiungendo alla matrice come si sta iterando su di esso, in modo che non termina l'esecuzione.

+0

+1 Grazie! Non ho fatto la connessione prima d'ora. – Dru

Problemi correlati