Es fällt mir schwer zu verstehen, was die Shift- und Unshift-Methoden der Array-Klasse in Ruby machen. Kann mir jemand helfen zu verstehen, was sie tun?Was bewirkt die Verschiebung von Ruby's Array?
Antwort
beim Suchen Ruby Documentation
Array.shift aus dem Array das erste Element entfernt und gibt sie
a = [1,2,3]
puts a.shift
=> 1
puts a
=> [2, 3]
Unshift prepends den bereitgestellten Wert auf der Vorderseite Das Array verschiebt alle anderen Elemente um
a=%w[b c d]
=> ["b", "c", "d"]
a.unshift("a")
=> ["a", "b", "c", "d"]
Sie können grundsätzlich Shift und Unshift als Operationen in einer FIFO-Warteschlange –
denken '' shift'' war so eine Entdeckung, danke! – dgilperez
@JacoPretorius Huh? 'shift' und' unshift' agieren wie ein FILO-Stack, 'push' und' shift' würden sich wie eine FIFO-Warteschlange verhalten, es sei denn, ich bin über etwas verwirrt. –
Es ergreift das erste 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.
Nun Verschiebung und Unshift sind * ähnlich * zu Pop und Push, außer dass sie Zeug vom Anfang eines Arrays hinzufügen und entfernen, anstatt vom Ende. –
Diese Antwort ist genau auf der richtigen Abstraktionsebene. –
@Alberto: Mit anderen Worten, sie betrachten die Front als die Spitze. Es gibt keine Voraussetzung dafür, dass es anders ist. –
Es gibt das erste Element des Arrays zurück und entfernt es aus dem Array, shifting die Elemente zurück an einem Ort. So
Verschiebung [1,2,3,4,5]
kehrt 1
und setzt das Array [2,3,4,5]
zu sein.
Mehr here.
shift
und unshift
wirkt in ähnlicher Weise wie pop
und push
: sie gemeint sind Arrays als Stapel zu verwenden, an denen Sie Elemente anhängen und entfernen (in der Regel eine pro Zeit). Der Unterschied ist nur, dass shift
und unshift
hinzufügen/entfernen Elemente am Anfang eines Array
, tatsächlich Verschiebung alle anderen Elemente ing, während pop
und push
hinzufügen/entfernen Elemente am Ende des 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]
Wenn Sie Ihre Antwort bearbeiten würden, um den Mipadi-Thread zusammenzufassen, würde ich gerne upvote. –
Kühl. Außerdem bin ich nicht sehr gut über Ruby informiert, aber wenn es auf der JVM läuft, würde ich erwarten, dass Push/Pop schneller wäre, da es nicht alle diese Elemente verschieben muss. –
Upvote für Stack-Analogie, aber denke auch an Rohre. Da wir Programmierer sein sollen, sollten wir auch Shift-Shift-Links und Unshift-Shift-Rechts-Shift-Links von rechts nach links denken. – mckenzm
Wenn Sie sich das Array als eine Reihe von zu verarbeitenden Werten vorstellen, können Sie den nächsten (vorderen) Wert übernehmen und die anderen Werte verschieben, um den verfügbaren Platz zu belegen. Unshift bringt Werte zurück - vielleicht sind Sie nicht bereit, einige von ihnen zu verarbeiten, oder lassen Sie etwas später Code damit umgehen.
- 1. Was bedeuten die Felder von Rubys GC.stat?
- 2. Was ist das Gegenteil von Rubys Include?
- 3. Was bewirkt die letzte Variablendeklaration in Methoden?
- 4. Python-Äquivalent von Rubys each_with_index?
- 5. Was bewirkt RxJS.Observable Entprellen?
- 6. Was bewirkt VS-Projektbindung?
- 7. Was bewirkt die ShadowCopyFiles-Eigenschaft in appdomain?
- 8. Was bewirkt die Variable DOCKER_TLS_VERIFY und DOCKER_CERT_PATH?
- 9. Was bewirkt die Eigenschaft 'env' in 'app.php'?
- 10. Was bewirkt die Markierung -f im Tail?
- 11. Was bewirkt, dass die Größe nicht übereinstimmt?
- 12. Was bewirkt charCodeAt (...) & 0xff?
- 13. Scala-Version von Rubys 'each_slice?
- 14. Was ist der Zweck von Rubys Double-Splat (`**`) in Methodenaufrufen?
- 15. Was bewirkt der Rückgabewert OnNotification() von IAlertNotifyHandler?
- 16. Was bewirkt die Verwendung von @NonNull bei einer void-Methode?
- 17. Was bewirkt die Einstellung von timeOffset beim Animieren?
- 18. Perl-Äquivalent von Rubys `reject!`?
- 19. Array auf das nächste Element Verschiebung
- 20. Was bewirkt `session.entropy_length` in` PHP.ini`?
- 21. Einstellen der Verschiebung Array in MPI_IScatterv() Problem
- 22. Was ist Rubys StringIO-Klasse wirklich?
- 23. Was ist das Python-Äquivalent von Rubys "inspect"?
- 24. was bewirkt, dass imagecreatetruecolor() fehlschlägt?
- 25. Was bewirkt "*" in regulären Ausdrücken?
- 26. Was bewirkt "$" in C# 6.0?
- 27. Was bewirkt eigentlich ein Filter?
- 28. Was bewirkt `SET ANSI_NULLS OFF`?
- 29. Was bewirkt "Zoom" in CSS?
- 30. Verschiebung von ViewWillAppear bis webViewDidFinishLoad
Sobald Sie lernen, dass 'shift/unshift' wie' push/pop' am anderen Ende des Arrays sind, können Sie das 'f' aus dem Namen der Methoden entfernen, um sich daran zu erinnern, welche Elemente 'dump' und welches "fügt" sie ein. :) – Phrogz
Danke, dass hilft wirklich lol. – agentbanks217
Einer der besten Kommentare aller Zeiten! Danke dir so sehr :) – tvdeyen