We are a software consultancy based in Berlin, Germany. We deliver
high quality web apps in short timespans.

Upstream Agile GmbH

Ruby Cookbook Tipps - Arrays, inject und Hashes

July 20, 2007 by alex

Thilo hat beim letzten Treffen der Berliner Ruby User Group gleich mal einen Buchgutschein für O’Reilly gewonnen und hat sich das Ruby Cookbook ausgesucht. Gestern ist’s angekommen und ich hab gleich mal geblättert. Hier zwei kleine Schätze, die sich auf (fast) zufällig aufgeschlagenen Seiten fanden:

Array.inject

Ich wusste schon lange, dass es diese Methode irgendwo geben musste, nur gefunden hatte ich sie noch nicht. Eine Methode, mit der man aus den Elementen eines Array einen Wert berechnen kann, z.B. die Summe eines Array voller Zahlen. Inject kann genau das, es ruft für jedes Element des Array einen übergebenen Block auf und gibt das Ergebnis an die Berechnung des nächsten Elements.

a = [1, 2, 3]
a.inject {|sum,i| sum + i}

Es geht auch etwas komplexer, z.B. aus einem Array mit Wertepaaren ein Hash aufbauen:

a = [[1,2], [3,4]]
 a.inject({}) {|hash, el| hash[el.first] = el.last; hash}

Wichtig hierbei ist, dass der Block wieder den Hash zurueck gibt, damit die nächste Operation wieder auf dem Hash läuft. Hash.= liefert jedenfalls nicht den Hash, sondern den zugewiesenen Wert.

Array.min / Array.max

Irgendwann brauchten wir mal die kleinere von 2 Zahlen. Ich hab ewig in der Doku von FixNum gesucht und nix gefunden und am Ende die eine Zeile selbst implementiert, unzwar für FixNum. Natürlich hatte ich an der falschen Stelle gesucht, denn um die kleinste von zwei oder mehr Zahlen zu finden, kann man einfach einen Array benutzen:

a = [1,2,3]
a.min # 1