next up previous contents index
Search Next: Hashtabellen erzeugen und verwalten Up: Arrays und Hashtabellen Previous: Mit Arrays arbeiten   Contents   Index


Iteratoren für Arrays

Ein Glanzlicht der Programmierung in Ruby kommt von Smalltalk: die Möglichkeit, Codeblöcke über Objektsammlungen iterieren zu lassen. Damit lassen sich Filter und Auswertungen sehr elegant herstellen.

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


next up previous contents index
Search Next: Hashtabellen erzeugen und verwalten Up: Arrays und Hashtabellen Previous: Mit Arrays arbeiten   Contents   Index
(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20