¿Cuál es la forma más fácil de empujar un elemento al comienzo de la matriz?

207

No puedo pensar en una línea para hacer esto. ¿Hay alguna manera?

Jeremy Smith
fuente

Respuestas:

387

¿Qué pasa con el uso del unshiftmétodo?

ary.unshift(obj, ...) → ary
Antepone los objetos al frente de uno mismo, moviendo otros elementos hacia arriba.

Y en uso:

irb>> a = [ 0, 1, 2]
=> [0, 1, 2]
irb>> a.unshift('x')
=> ["x", 0, 1, 2]
irb>> a.inspect
=> "["x", 0, 1, 2]"
mu es demasiado corto
fuente
Ese era el que estaba buscando, olvidé el nombre.
Ed S.
1
Miré, simplemente no los vi en un escaneo rápido.
Ed S.
1
@Ed: La lista de métodos en la parte superior de la página podría estar mejor formateada, es muy difícil escanear visualmente como está. Lo encontré porque sabía el nombre del método que estaba buscando :)
mu es demasiado corto
118
Si tiene problemas para recordar entre shifty en unshiftcuanto a qué se agrega a la matriz y cuál se elimina de la matriz, coloque una 'f' de los nombres mentalmente y obtendrá una imagen demasiado clara en cuanto a la dirección. (Y luego debe recordar que estos métodos no funcionan en el "final" de la matriz.;)
Phrogz
3
@Phrogz ¡La mejor técnica mnemónica que he escuchado en años! :-)
konung
47

Puedes usar insert:

a = [1,2,3]
a.insert(0,'x')
=> ['x',1,2,3]

Donde el primer argumento es el índice para insertar y el segundo es el valor.

Ed S.
fuente
23
array = ["foo"]
array.unshift "bar"
array
=> ["bar", "foo"]

ten cuidado, es destructivo!

John H
fuente
11

También puede usar la concatenación de matriz :

a = [2, 3]
[1] + a
=> [1, 2, 3]

Esto crea una nueva matriz y no modifica el original.

ma11hew28
fuente
11

Desde Ruby 2.5.0, Array se envía con el prepend método (que es solo un alias para el unshiftmétodo).

steenslag
fuente
1
Esto también funciona con ruby ​​2.4.4p296, ¿tal vez solo con ruby ​​2.4?
Obromios
9

Puedes usar methodsolverpara encontrar las funciones de Ruby.

Aquí hay un pequeño guión,

require 'methodsolver'

solve { a = [1,2,3]; a.____(0) == [0,1,2,3] }

Ejecutando esto imprime

Found 1 methods
- Array#unshift

Puedes instalar métodosolver usando

gem install methodsolver
akuhn
fuente
Genial, no pensé que esto fuera posible escribir LOL
Marko Avlijaš
irb> require 'methodsolver'causas LoadError: cannot load such file -- method_sourcede ... de /var/lib/gems/1.9.1/gems/methodsolver-0.0.4/lib/methodsolver.rb:2. Ruby 1.9.3p484, irb 0.9.6, Ubuntu 14.
Camille Goudeseune
1
Intente usar en prylugar deirb
akuhn