Tengo una matriz bidimensional en Ruby de la que quiero producir un duplicado de trabajo. Obviamente no puedo hacer esto;¿Hay una manera simple de duplicar una matriz multidimensional en Ruby?
array=[[3,4],[5,9],[10,2],[11,3]]
temp_array=array
como las modificaciones que haga a temp_array también se hará a la matriz, como simplemente ha copiado el identificador de objeto. Pensé que sería capaz de evitar esto simplemente usando;
temp_array=array.dup
pero esto no funciona como temp_array es simplemente un conjunto de identificadores de objetos que consiguen duplican así que aún así terminar la modificación de la matriz inicial (si entiendo lo que salió mal cuando hice esto). La solución que encontré fue hacer lo siguiente;
temp_array=[]
array.each{|sub| temp_array << sub.dup}
Esto logra lo que quiero pero parece ser una forma incómoda de resolver mi problema.
Me preocupa cómo funcionaría esto si no supiera lo que mi matriz iba a contener (por ejemplo, si era posible que algunas partes de la matriz tuvieran 3 dimensiones). Probablemente tendría que probar la clase de cada miembro de la matriz para ver si tenía que repetirla para poder duplicarla. No es una tarea imposible en absoluto, pero me parece desordenada. ¿Es simplemente una consecuencia de que Ruby carezca de soporte integrado para matrices multidimensionales o hay una función incorporada simple para hacer esto que me he perdido?
Ese es el camino. Me gusta poner ese código en Object.deep_copy. –
Genial, gracias. En realidad, esto explica todo el asunto de Marshalling para mí (aunque necesito ir y hacer más lecturas para realmente entenderlo). – brad