2010-09-01 18 views

Respuesta

232

"pop" ing el primer elemento de una matriz se llama "shift" ("unshift" siendo la operación de añadir un elemento en frente de la matriz).

+9

Tenga en cuenta que esto muta la matriz y devuelve 'nil' en una matriz vacía. Ver 'drop' para una alternativa, como se menciona en la otra respuesta. – Jay

10

Se puede utilizar:

a.slice!(0) 

slice! generaliza a cualquier índice o rango.

284

Utilice el método shift en la matriz de

>> x = [4,5,6] 
=> [4, 5, 6]                
>> x.shift 
=> 4 
>> x                  
=> [5, 6] 

Si desea eliminar los elementos n de partida puede utilizar x.shift(n)

+27

esto se debe marcar la respuesta correcta, ya que se da un ejemplo –

+2

la explicación debe ser combinado en la respuesta correcta ya que el contenido es el mismo – Yolgie

115
[0, 132, 432, 342, 234][1..-1] 
=> [132, 432, 342, 234] 

Así que a diferencia shift o slice esto devuelve la matriz modificada (útil para uno revestimientos).

+11

Uno de gotcha a tener en cuenta: si la matriz está vacía devuelve nil: '[] [ 1 ..- 1] => nil' y no '[]'. – Mohamad

+2

¿No es '[1,2,3] .shift' un trazador de líneas único? – thekingoftruth

+4

@thekingoftruth: sí, pero se evalúa como el elemento que arrojaste, no el resto de la matriz, por lo que toma otra línea. –

86

Esto es bastante limpio:

head, *tail = [1, 2, 3, 4, 5] 
#==> head = 1, tail = [2, 3, 4, 5] 

como está escrito en los comentarios, hay una ventaja de que no la mutación de la lista original.

+2

muy inteligente, y funciona a la perfección. Una vez que hagas esto, tendrás las dos variables "cabeza" y "cola" a tu disposición. – nfriend21

+3

Esto me recuerda mucho al ceceo. '(let ((head (car mylist)) (tail (cdr mylist)) ...)' – thekingoftruth

+2

@thekingoftruth y me recuerda a Haskell ... ;-) – hurikhan77

279
a = [0,1,2,3] 

a.drop(1) 
# => [1, 2, 3] 

a 
# => [0,1,2,3] 

y adicionalmente:

[0,1,2,3].drop(2) 
=> [2, 3] 

[0,1,2,3].drop(3) 
=> [3] 
+13

La mejor respuesta desde (a) se evalúa como la matriz recortada, y funciona como se esperaba en una matriz vacía: '[] .drop (1) => []' –

+4

También la mejor respuesta porque OP dijo "¿cuál es la forma más fácil de deshacerse de la primer elemento " – notaceo

+5

** Mejor respuesta ** mucho mejor que los demás –

4

Puede utilizar Array.delete_at (0) método que eliminará primer elemento.

x = [2,3,4,11,0] 
x.delete_at(0) unless x.empty? # [3,4,11,0] 
+0

No creo 'a menos que x.empty?' Sea necesario. Simplemente devuelve 'nil' si el índice está fuera de rango. – tknomad

1

que puede utilizar:
arr - [arr[0]] o de lo contrario arr - [arr.shift()] o simplemente arr.shift(1)

Cuestiones relacionadas