Die einfachsten Iteratoren sind each und
each_index. Jedes Element des Arrays wird in den
Codeblock geschickt, Rückgabewert der Methode ist das
Array selbst; die Codeblöcke werden allein wegen ihrer
Nebeneffekte aufgerufen.
a = [1, 1.0, "1"]
a.each { |item| p item.type }
#-> Fixnum Float String
b = [4, 3, 2, 1]
b.each_index{ |index|
p b[index] + index
} #-> 4 4 4 4
Mit map oder dem Synonym collect werden alle
Elemente der Reihe nach dem Codeblock übergeben und
aus den Rückgabewerten des Blocks wird ein neues Array gebildet.
sum = 0
b.map { |item| sum += item } #-> [4, 7, 9, 10]
Die komplementären Methoden select (auch als find_all bekannt)
und reject erstellen ein Array mit den Elementen, die der Bedingung im
Codeblock genügen beziehungsweise nicht genügen. Sie sind die typischen
Methoden, um aus einer Sammlung bestimmte Elemente herauszufiltern.
a.select { |item| item.type == 0.type }
#-> [1]
b.reject { |item| item % 2 == 0 }
#-> [3, 1]
Dazu passend gibt es noch die Methode delete_if, die
aus dem angesprochenen Array die Elemente entfernt, auf welche die
Bedingung im Codeblock zutrifft. Rückgabewert ist das modifizierte
Array selbst.
c = ["Anton", "Berti", "Conny", "Det"]
c.delete_if { |item| item.length > 3 }
c #-> ["Det"]