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?
pushes in die Spitze und shiftes 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?
pushes in die Spitze und shiftes 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"]
shiftund unshiftverhalten sich wie ein FILO-Stapel pushund shiftwürden sich wie eine FIFO-Warteschlange verhalten , es sei denn, ich bin über etwas verwirrt.
shiftund unshiftverhält sich ähnlich wie popund 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 shiftund unshiftHinzufügen / Entfernen Elemente am Anfang ein Array, tatsächlich shift alle anderen Elemente ing, während popund pushHinzufü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: shiftist Pop, unshiftist Push.
popund pushauch ArrayMethode 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/unshiftwiepush/popam 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. :)