2010-09-15 8 views
74

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?

+148

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

+1

Danke, dass hilft wirklich lol. – agentbanks217

+0

Einer der besten Kommentare aller Zeiten! Danke dir so sehr :) – tvdeyen

Antwort

80

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"] 
+6

Sie können grundsätzlich Shift und Unshift als Operationen in einer FIFO-Warteschlange –

+1

denken '' shift'' war so eine Entdeckung, danke! – dgilperez

+0

@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. –

8

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.

+7

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. –

+2

Diese Antwort ist genau auf der richtigen Abstraktionsebene. –

+0

@Alberto: Mit anderen Worten, sie betrachten die Front als die Spitze. Es gibt keine Voraussetzung dafür, dass es anders ist. –

1

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.

45

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] 
+0

Wenn Sie Ihre Antwort bearbeiten würden, um den Mipadi-Thread zusammenzufassen, würde ich gerne upvote. –

+0

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. –

+0

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

2

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.

Verwandte Themen