¿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?

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]"

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.


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

ten cuidado, es destructivo!



11

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


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.