Einfache Array-Iteration in Ruby

7

Was ist ein besserer Weg, um ein Array zu durchlaufen, während man durch ein anderes Array iteriert? Zum Beispiel, wenn ich zwei Arrays wie das Folgende habe:

%Vor%

Angenommen, die Arrays entsprechen einander - das heißt, Rover ist ein Terrier, Fido ist ein Lhasa Apso, usw. - Ich möchte eine Hundeklasse und ein neues Hund-Objekt für jeden Gegenstand erstellen:

> %Vor%

Ich kann Namen und Rassen mit folgendem durchlaufen:

%Vor%

Ich habe jedoch das Gefühl, dass die Verwendung der Indexvariablen der falsche Weg ist. Was wäre ein besserer Weg?

    
michaelmichael 15.04.2010, 20:41
quelle

4 Antworten

24
%Vor%

Array#zip verschachtelt das Zielarray mit Elementen der Argumente, also

%Vor%

Sie können Arrays unterschiedlicher Länge verwenden (in diesem Fall bestimmt das Zielarray die Länge des resultierenden Arrays, wobei die zusätzlichen Einträge mit nil ausgefüllt werden).

%Vor%

Sie können auch mehr als zwei Arrays zusammenfügen:

%Vor%

Array#map ist ein großartiger Weg, um ein Array zu transformieren, da es ein Array zurückgibt, in dem jeder Eintrag das Ergebnis der Ausführung des Blocks auf dem entsprechenden Eintrag im Ziel-Array ist.

%Vor%

Wenn Sie bei der Verwendung von Iteratoren über Arrays von Arrays einen Block mit mehreren Parametern angeben, werden die Array-Einträge automatisch in diese Parameter unterteilt:

%Vor%

Wie Matt Briggs erwähnt , #each_with_index ist ein weiteres gutes Tool, das man kennen sollte. Es durchläuft die Elemente eines Arrays und übergibt nacheinander jedem Element einen Block.

%Vor%

Wenn Sie einen Iterator wie #each_with_index verwenden, können Sie Array-Elemente in ihre Bestandteile zerlegen:

%Vor%     
rampion 15.04.2010, 20:44
quelle
3

each_with_index springt in den Sinn, es ist ein besserer Weg, es so zu machen, wie Sie sind es tun. rampion hat eine bessere allgemeine Antwort, diese Situation ist, wofür zip ist.

    
Matt Briggs 15.04.2010 20:44
quelle
3

Dies wurde von Flanagan und Matz, "The Ruby Programming Language", 5.3.5 "Externe Iteratoren", Beispiel 5-1, p. 139:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %Vor%

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Ausgabe:

%Vor%

was ich denke, was wir wollten!

    
Jan Hettich 17.04.2010 07:52
quelle
2

Sowie each_with_index (von Matt erwähnt) gibt es each_index . Ich benutze das manchmal, weil es das Programm symmetrischer macht und daher falscher Code falsch aussieht .

%Vor%     
Andrew Grimm 18.05.2010 06:52
quelle

Tags und Links