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?
pushestá en la parte superior y shiftsale 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?
pushestá en la parte superior y shiftsale 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"]
shifty unshiftactuar como una pila FILO, pushy shiftactuaría como una cola FIFO, a menos que esté confundido sobre algo.
shifty unshiftactúa de manera similar a popy 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 shifty unshiftagregar / eliminar elementos al comienzo de un Array, en realidad cambiar todos los demás elementos, mientras popy pushagregar / 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: shiftes pop, unshiftes push.
popy pushtambién son Arraymé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/unshiftson comopush/popen 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'. :)