2012-01-31 15 views
28

Me gustaría agregar un elemento a una matriz pero sin cambiando realmente esa matriz y, en su lugar, devolviendo una nueva. En otras palabras, quiero evitar:add element to ruby ​​array return new array

arr = [1,2] 
arr << 3 

cual se devolvía:

[1,2,3] 

Cambio arr sí. ¿Cómo puedo evitar esto y crear una nueva matriz?

Respuesta

36

Puede agregar fácilmente dos matrices en Ruby con el operador plus. Entonces, solo haz una matriz de tu elemento.

arr = [1, 2] 
puts arr + [3] 
# => [1, 2, 3] 
puts arr 
# => [1, 2] 
+0

perfecto. ¡Gracias! – srchulo

+5

¿Por qué no hay forma en Ruby de agregar un elemento a una matriz que afecte la matriz original? – gitb

+0

@gitb El método array # + hace esto; crea una nueva matriz desde el lado izquierdo y el lado derecho del operador más y devuelve la nueva matriz, dejando ambos operandos sin modificar. – rodamn

6

También funciona mediante la extensión de arr usando * operador

arr = [1,2] 
puts [*arr, 3] 
=> [1, 2, 3] 
+0

Benchmarked it, es mucho más lento – user3033467