Der Zugriff auf einzelne Elemente einer Hashtabelle erfolgt
über verschiedene Möglichkeiten. Mit
hash[key] erhält man den zum Schlüssel key gehörenden
Wert. Sollte key in der Hashtabelle nicht als Schlüssel
verwendet worden sein, wird der Standardwert geliefert
(normalerweise nil, kann aber der new-Methode mitgegeben
(siehe oben) oder per default-Methode geändert werden).
Wie bei Arrays kann mit indexes ein Array mit mehreren
Einträgen erzeugt werden. has_key? und has_value?
entsprechen der include?-Methode bei Arrays; sie ergeben
true, wenn der Schlüssel bzw. Wert in der Hashtabelle
enthalten ist, false sonst.
h["a"] #-> 1
h["a"] = 0 #-> 0
h.indexes("a", "b") #-> [0, 2]
h.has_key?(0) #-> false
h.has_value?(0) #-> true
h.index(0) #-> "a"
Mit index wird der zu einem Wert gehörige Schlüssel geliefert,
so dass sowohl bei Arrays als auch bei Hashtabellen gilt:
collection[collection.index(value)] == value
Mit der shift-Methode kann ein Element aus der Hashtabelle entfernt
werden. Da Hashes aber keine feste Reihenfolge besitzen, ist der Rückgabewert
dieser Methode nicht absehbar. Hingegen erlaubt delete die gezielte
Entfernung eines Elements mit einem bekannten Schlüsselwert.
h = {"a"=>1, "b"=>2, "c"=>3}
h.shift #-> ["a", 1]
h.delete("b") #-> 2
h #-> {"c"=>3}
Im Ruby Application Archive [RAA] gibt es ein Modul PseudoHash, mit dem einer
Hash-ähnlichen Datenstruktur eine kanonische Reihenfolge mitgegeben werden kann,
so dass die Ergebnisse von shift wieder einfach vorherzusagen sind.
Ruby bietet noch eine sehr flexible Methode an, um
Werte aus Hashtabellen zu holen: fetch.
h = Hash.new('nein')
h[2] #-> "nein"
h.fetch(2) #-> IndexError
h.fetch(2, -37) #-> -37
h.fetch(2) { |key|
"#{key} not found"
} #-> "2 not found"
Wenn der Schlüssel nicht vorhanden ist, erzeugt fetch
eine Ausnahme, die aufgefangen werden kann. Alternativ dazu
kann man einen vom üblichen Standardwert abweichenden Ersatzwert
angeben oder einen Codeblock verwenden,
der ausgeführt wird, wenn der Schlüssel nicht existiert.