2012-01-31 6 views
28

Vorrei aggiungere un elemento a un array ma senza cambiando effettivamente quell'array e invece ne restituisce uno nuovo. In altre parole, voglio evitare:aggiungi elemento a ruby ​​array restituisce nuovo array

arr = [1,2] 
arr << 3 

Quale sarebbe tornato:

[1,2,3] 

Modifica arr stessa. Come posso evitare questo e creare un nuovo array?

risposta

36

È possibile aggiungere facilmente due array in Ruby con l'operatore plus. Quindi, crea un array dal tuo elemento.

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

perfetto. Grazie! – srchulo

+5

Perché non c'è modo in Ruby di aggiungere un elemento a un array con effetti sull'array originale? – gitb

+0

@gitb Il metodo array # + esegue questa operazione; crea una nuova matrice dal lato sinistro e dal lato destro dell'operatore più e restituisce il nuovo array, lasciando entrambi gli operandi non modificati. – rodamn

6

funziona anche estendendo arr utilizzando * operatore

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

Benchmarked, è molto più lento – user3033467