Es fällt mir schwer zu verstehen, was die Shift- und Unhift-Methoden der Array-Klasse in Ruby bewirken. Kann mir jemand helfen zu verstehen, was sie tun?
push
es in die Spitze und shift
es aus dem anderen Ende.
Es fällt mir schwer zu verstehen, was die Shift- und Unhift-Methoden der Array-Klasse in Ruby bewirken. Kann mir jemand helfen zu verstehen, was sie tun?
push
es in die Spitze und shift
es aus dem anderen Ende.
Antworten:
Blick auf die Ruby-Dokumentation
Array.shift entfernt das erste Element aus dem Array und gibt es zurück
a = [1,2,3]
puts a.shift
=> 1
puts a
=> [2, 3]
Durch Aufheben der Verschiebung wird der angegebene Wert vor das Array gestellt, wobei alle anderen Elemente um eins nach oben verschoben werden
a=%w[b c d]
=> ["b", "c", "d"]
a.unshift("a")
=> ["a", "b", "c", "d"]
shift
und unshift
verhalten sich wie ein FILO-Stapel push
und shift
würden sich wie eine FIFO-Warteschlange verhalten , es sei denn, ich bin über etwas verwirrt.
shift
und unshift
verhält sich ähnlich wie pop
und push
: Sie sollen Arrays als Stapel verwenden, an die Sie Elemente anhängen und entfernen können (normalerweise eines pro Mal). Der Unterschied ist nur , dass shift
und unshift
Hinzufügen / Entfernen Elemente am Anfang ein Array
, tatsächlich shift alle anderen Elemente ing, während pop
und push
Hinzufügen / Entfernen Elemente am Ende der Array
, so dass andere Elemente Indizes zu erhalten.
Beispiele:
# 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]
Es greift nach dem ersten Element, entfernt es aus dem Array und gibt das entfernte Element zurück. Es ist im Grunde eine Möglichkeit, ein Array wie einen Stapel zu behandeln: shift
ist Pop, unshift
ist Push.
pop
und push
auch Array
Methode sind, keine Verwirrung gemacht werden darf. :-)
Wenn Sie sich das Array als eine Warteschlange mit zu verarbeitenden Werten vorstellen können, können Sie den nächsten (vorderen) Wert übernehmen und die andere Wertigkeit "verschieben", um den zur Verfügung gestellten Platz zu belegen. Beim Verschieben werden Werte wieder eingefügt - möglicherweise sind Sie nicht bereit, einige davon zu verarbeiten, oder lassen sie von späterem Code verarbeiten.
shift/unshift
wiepush/pop
am anderen Ende des Arrays ist, können Sie das 'f' mental aus dem Namen der Methoden streichen, um sich zu merken, welche Elemente "ausgegeben" und welche "eingefügt" werden. :)