<- Iteratoren
Beispiel: Adressbuch ->

Hashes

Die nächste Klasse, auf die wir einen Blick werfen, ist Hash.

Hashes sind eine Verallgemeinerung von Arrays. Statt nur ganze Zahlen als Indizes zuzulassen, wie z.B. bei array[3], erlauben Hashes irgendein Objekt als "index" zu benutzen. Somit können Sie hash["name"] schreiben.

Wir wollen nun einige Informationen über einen Freund speichern. Wir könnten ein Array benutzen wie folgt:


freund = [ "Herbert", "Maier", "Auf Maien 69",  
  "Neunkirchen", "Saarland" 
]
                       

Das würde gehen, aber wir müssten uns merken, dass z.B. freund[0] der Vorname ist, freund[1] der Nachname usw. . Es könnte noch komplizierter kommen.

Das ist genau das Problem, wo ein Hash weiterhelfen kann. So definiert man ein Hash:


freund = {
  "vorname"    => "Herbert",
  "nachname"   => "Maier",
  "adresse"    => "Auf Maien 69",  
  "stadt"      => "Neunkirchen",
  "bundesland" => "Saarland"
}
                       

Genauso wie bei Arrays können Sie ein neues Feld wie folgt hinzufügen:


freund["land"] = "Deutschland"  
                       

Achtung: Beachten Sie, dass Sie Hashes mit geschweiften Klammern { ... } statt mit eckigen Klammern [ ... ] wie bei den Arrays erstellen können.

Schlüssel und Werte

Da Hases keine numerischen Indizes benutzen, benutzen wir das Wort Schlüssel (keys) stattdessen. Die Objekte, auf die die Schlüssel zeigen, werden Werte (values) genannt.

Im obigen Beispiel sind demnach "vorname", "nachname" und "stadt" Schlüssel. Ihre entsprechenden Werte sind "Herbert", "Maier" und "Neunkirchen".

Über Hashes iterieren

Hashes haben auch Iteratoren.

Hash#each

Hashes haben die Methode Hash#each, ähnlich zu Array#each. Diese Methode liefert jedoch den Schlüssel als auch den Wert.


freund.each do |key, value| 
	puts key + " => " + value 
end
                       

Das ergibt:


stadt => Neunkirchen
nachname => Maier
land => Deuschland
bundesland => Saarland
adresse => Auf Maien 69  
vorname => Herbert
                       

Das zeigt uns einen Nachteil von Hashes. Die Daten in Hashes sind nicht in irgendeiner bestimmten Reihenfolge angeordnet. Gibt es einen Grund, warum Ruby wissen sollte, dass "vorname" vor "stadt" kommt? Nein.

Der beste Weg, um mit dieser Art von Problem umzugehen, ist das Erstellen einer Klasse, die sich um dieses Problem kümmert. Ruby ist eine exzellente Sprache, um Ihre eigene Klasse zu erstellen. Aber zuvor müssen wir noch auf anderes Material eingehen. Klassen und Mathoden erstellen, ist das Thema des nächsten Kapitels.

Hash#each_pair ist ein Synonym für Hash#each.

Hash#each_key

Diese Methode iteriert über alle Schlüssel genauso wie Arrah#each.


>> freund.each_key do |key|  
?>     puts key
>> end
bundesland
nachname
adresse
vorname
stadt
land
                       

Hash#each_value

Iteriert über alle Werte.


>> friend.each_value do |val|  
?>     puts val
>> end
Neunkirchen
Maier
Deutschland
Saarland
Auf Maien 69
Herbert
                       
<- Iteratoren
Übung: Adressbuch ->