Faccio fatica a capire cosa fanno i metodi shift e unshift della classe Array in Ruby. Qualcuno può aiutarmi a capire cosa fanno?
push
in alto e shift
fuori dall'altra parte.
Faccio fatica a capire cosa fanno i metodi shift e unshift della classe Array in Ruby. Qualcuno può aiutarmi a capire cosa fanno?
push
in alto e shift
fuori dall'altra parte.
Risposte:
Guardando la documentazione di Ruby
Array.shift rimuove il primo elemento dall'array e lo restituisce
a = [1,2,3]
puts a.shift
=> 1
puts a
=> [2, 3]
Unshift antepone il valore fornito all'inizio dell'array, spostando tutti gli altri elementi in alto di uno
a=%w[b c d]
=> ["b", "c", "d"]
a.unshift("a")
=> ["a", "b", "c", "d"]
shift
e si unshift
comporta come uno stack FILO, push
e shift
si comporterebbe come una coda FIFO, a meno che io non sia confuso su qualcosa.
shift
e unshift
agisce in modo simile a pop
e push
: hanno lo scopo di utilizzare array come stack a cui è possibile aggiungere e rimuovere elementi (di solito uno alla volta). La differenza è proprio questa shift
e unshift
aggiungere / rimuovere elementi all'inizio di un Array
, effettivamente spostando tutti gli altri elementi, mentre pop
e push
aggiungere / rimuovere elementi alla fine di Array
, in modo da preservare gli indici degli altri elementi.
Esempi:
# 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]
Afferra il primo elemento, lo rimuove dall'array e restituisce l'elemento rimosso. È fondamentalmente un modo per trattare un array come uno stack: shift
è pop, unshift
è push.
pop
e push
sono anche Array
metodo, non si deve fare confusione. :-)
Se puoi pensare all'array come a una coda di valori da elaborare, puoi prendere il valore successivo (anteriore) e "spostare" l'altro valore per occupare lo spazio reso disponibile. unshift rimette i valori - forse non sei pronto per elaborarne alcuni, o lascerai che un codice successivo li gestisca.
shift/unshift
sono comepush/pop
all'altra estremità dell'array, puoi mentalmente eliminare la "f" dal nome dei metodi per ricordare quale "scarica" gli elementi e quale li "inserisce". :)