Estoy teniendo dificultades para entender qué hacen los métodos de cambio y no cambio de la clase Array en Ruby. ¿Alguien puede ayudarme a entender lo que hacen?
push
está en la parte superior y shift
sale por el otro extremo.
Estoy teniendo dificultades para entender qué hacen los métodos de cambio y no cambio de la clase Array en Ruby. ¿Alguien puede ayudarme a entender lo que hacen?
push
está en la parte superior y shift
sale por el otro extremo.
Respuestas:
Mirando la documentación de Ruby
Array.shift elimina el primer elemento de la matriz y lo devuelve
a = [1,2,3]
puts a.shift
=> 1
puts a
=> [2, 3]
Unshift antepone el valor proporcionado al frente de la matriz, moviendo todos los demás elementos hacia arriba uno
a=%w[b c d]
=> ["b", "c", "d"]
a.unshift("a")
=> ["a", "b", "c", "d"]
shift
y unshift
actuar como una pila FILO, push
y shift
actuaría como una cola FIFO, a menos que esté confundido sobre algo.
shift
y unshift
actúa de manera similar a pop
y push
: están destinados a usar matrices como pilas a las que puede agregar y eliminar elementos (generalmente uno por vez). La diferencia es solo eso shift
y unshift
agregar / eliminar elementos al comienzo de un Array
, en realidad cambiar todos los demás elementos, mientras pop
y push
agregar / eliminar elementos al final de Array
, preservando así los índices de otros elementos.
Ejemplos:
# Spacing for clarity:
a = [2, 4, 8] # a => [2, 4, 8]
a.push(16, 32) # a => [2, 4, 8, 16, 32]
a.unshift(0, 1) # a => [0, 1, 2, 4, 8, 16, 32]
a.shift # a => [1, 2, 4, 8, 16, 32]
a.pop # a => [1, 2, 4, 8, 16]
Toma el primer elemento, lo elimina de la matriz y devuelve el elemento eliminado. Es básicamente una forma de tratar una matriz como una pila: shift
es pop, unshift
es push.
pop
y push
también son Array
método, no se debe crear confusión. :-)
Si puede pensar en la matriz como una cola de valores para ser procesados, entonces puede tomar el siguiente valor (frontal) y "cambiar" los otros valores para ocupar el espacio disponible. unshift vuelve a colocar los valores; tal vez no esté listo para procesar algunos de ellos, o dejará que algún código posterior los maneje.
shift/unshift
son comopush/pop
en el otro extremo de la matriz, puede eliminar mentalmente la 'f' del nombre de los métodos para recordar cuál 'vuelca' elementos y cuál los 'inserta'. :)