In Ruby aufzählbar

8

Ich versuche, Enumerable (wie Array) umzukehren, ohne die reverse -Methode zu verwenden, sondern reverse_each iterator.

Ich hoffte, dass folgender Code genügt:

%Vor%

jedoch gibt der Block das Array nicht in umgekehrter Reihenfolge zurück. Natürlich könnte ich schreiben

%Vor%

aber ich möchte Gegenstände auf die erste Art sammeln. Was ist die Quelle, wenn dieses Verhalten und wie soll ich meinen Ausdruck schreiben, um die Anforderung zu erfüllen?

    
Mateusz Chromiński 01.06.2012, 16:23
quelle

3 Antworten

19

Ab 1.8.7, Enumerable#each_* Methoden gibt einen Enumerator wenn kein Block zur Verfügung steht. Das ist ganz nett: Viele ursprünglich imperative Methoden können nun in funktionaler Form als Ausdrücke verwendet werden.

Wenn Sie also Elemente sammeln möchten, verwenden Sie Enumerable#map für diesen Enumerator:

%Vor%     
tokland 01.06.2012, 16:25
quelle
-1

Eine andere Methode wäre [1, 2, 3].reverse_each.to_a

    
Dorian 27.10.2016 12:24
quelle
-1

(1..3) .reverse_each {| v | pv}

erzeugt:

1 2 3

Er Erstellt ein temporäres Array und durchläuft dieses Array in umgekehrter Reihenfolge, gibt jedoch nicht die umgekehrte Kopie der transformierten Sammlung zurück

Wenn kein Block angegeben ist, wird stattdessen ein Enumerator zurückgegeben.

Aber Kartenmethode von Ruby

Gibt für jedes Element in enum ein neues Array mit den Ergebnissen von running block zurück.

p [1,2,3] .reverse_each.map {| v | v}

reverse_each - fungiert als Iterator

map - wird eine neue Kollektion bilden

    
Neha Chopra 13.07.2017 17:08
quelle

Tags und Links