2012-09-02 14 views
6

¿Por qué este código 'encierra' ruby? ¿Y cuál es la mejor manera de superarlo? Publiqué mi solución a continuación. Hay otra manera de hacer esto? ¡Gracias por adelantado!Agregar a una matriz mientras itera

Código:

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

Mi solución:

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

Respuesta

8

Eso es porque cada uno utiliza un enumerador (por lo que nunca llega al final si se mantiene añadiendo a la misma).

Puede duplicar la matriz antes de aplicar cada una.

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

Otra forma es añadir los elementos adicionales dadas por el mapa:

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

+1 Guau .. ¡Eso tiene sentido ahora! ¡Gracias! – Dru

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

Está añadiendo a la matriz como estás interactuando sobre ella, por lo que nunca haya terminado de ejecutarse.

+0

+1 ¡Gracias! No hice la conexión antes de ahora. – Dru

Cuestiones relacionadas