Faccio fatica a capire cosa fanno i metodi shift e unshift della classe Array in Ruby. Qualcuno può aiutarmi a capire cosa fanno?
pushin alto e shiftfuori 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?
pushin alto e shiftfuori 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"]
shifte si unshiftcomporta come uno stack FILO, pushe shiftsi comporterebbe come una coda FIFO, a meno che io non sia confuso su qualcosa.
shifte unshiftagisce in modo simile a pope 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 shifte unshiftaggiungere / rimuovere elementi all'inizio di un Array, effettivamente spostando tutti gli altri elementi, mentre pope pushaggiungere / 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.
pope pushsono anche Arraymetodo, 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/unshiftsono comepush/popall'altra estremità dell'array, puoi mentalmente eliminare la "f" dal nome dei metodi per ricordare quale "scarica" gli elementi e quale li "inserisce". :)