Frage Wie ändere ich ein Array, während ich in Ruby darüber iteriere?


Ich lerne gerade Ruby so entschuldigen, wenn das zu Neuling für hier ist, aber ich kann das nicht aus dem Spitzhacken-Buch herausarbeiten (wahrscheinlich nur nicht sorgfältig genug lesen). Wie auch immer, wenn ich ein Array so habe:

arr = [1,2,3,4,5]

... und ich möchte, sagen wir mal, jeden Wert im Array mit 3 multiplizieren. Ich habe Folgendes herausgefunden:

arr.each {|item| item *= 3}

... bringt mir nicht, was ich will (und ich verstehe, warum ich das Array nicht selbst modifiziere).

Was ich nicht verstehe, ist, wie man das ursprüngliche Array innerhalb des Codeblocks nach dem Iterator ändert. Ich bin sicher, das ist sehr einfach.


76
2017-11-21 00:07


Ursprung


Antworten:


Benutzen map um ein neues Array aus dem alten zu erstellen:

arr2 = arr.map {|item| item * 3}

Benutzen map! Um das Array an Ort und Stelle zu ändern:

arr.map! {|item| item * 3}

Sehen Sie es online arbeiten: Ideone


121
2017-11-21 00:09



Um das Array direkt zu ändern, verwenden Sie arr.map! {|item| item*3}. Verwenden Sie zum Erstellen eines neuen Arrays basierend auf dem Original (was oft vorzuziehen ist) arr.map {|item| item*3}. Tatsächlich denke ich immer zweimal nach, bevor ich benutze each, denn normalerweise gibt es eine Funktion höherer Ordnung wie map, select oder inject das macht was ich will.


16
2017-11-21 00:44



arr.collect! {|item| item * 3}

5
2018-06-06 12:57