12.4 Hashes
In Hashes werden Schlüssel-Werte-Paare gespeichert. Hashes werden sehr häufig für die Übergabe von Parametern verwendet. ActiveSupport erweitert die Hash-Klasse um eine Reihe von nützlichen Methoden.
diff
Mit der Methode diff kann der Unteschied zwischen zwei Hashes bestimmt werden.
hash1 = {:firstname=>"William", :lastname=>"Adama"} hash2 = {:firstname=>"Williams", :lastname=>"Adama"} hash1.diff(hash2) => {:firstname=>"William"}
Umwandlung
Die Schlüsselelemente können mit der Methode stringify_keys in Zeichenketten und mit der Methode symbolize_keys in Symbole umgewandelt werden. Die Methode to_options ist ein Alias der Methode symbolize_keys.
hash = {:firstname=>"William", :lastname=>"Adama"} hash.stringify_keys => {"lastname"=>"Adama", "firstname"=>"William"} hash.stringify_keys.symbolize_keys => {:firstname=>"William", :lastname=>"Adama"} hash.stringify_keys.to_options => {:firstname=>"William", :lastname=>"Adama"}
Die Methode assert_valid_keys überprüft, ob der Hash nur Schlüssel (Keys) enthält, die in der Parameterliste angegeben sind. Im Erfolgsfall wird nil zurückgeliefert. Ansonsten wird ein ArgumentError-Ausnahmefehler erzeugt.
Diese Methode wird verwendet, um zu überprüfen, ob nur zulässige Schlüssel angegeben wurden.
options = {:num_values=> 2, :show_all => true, :bla=>1} options.assert_valid_keys(:num_values, :show_all) => ArgumentError: Unknown key(s): bla
Die Methode reverse_merge(other_hash) und die Alias-Methode reverse_update(other_hash) liefern dieselben Schlüssel-Werte-Paare des Hashs zurück, wobei die fehlenden Schlüssel-Werte-Paare aus other_hash hinzugefügt werden. Die Methoden werden häufig zum Setzen von Standard-Optionen bei der Übergabe von Parametern verwendet.
options = {:show_all => true} options.reverse_merge(:show_all => false, :num_values=>10) => {:show_all=>true, :num_values=>10}
Neu in Rails 2.0
Um das gesamte Hash, außer einem bestimmten Schlüssel-Element zurückzuliefern kann die Methode except eingesetzt werden.
hash = {:firstname=>"William", :lastname=>"Adama", :password=>"secret"} hash.except(:password) => {:firstname=>"William", :lastname=>"Adama"}
Es gibt zu fast jeder der angegebenen Methoden auch Methoden mit Ausrufezeichen, die nicht ein neues Hash zurückliefern, sondern das Hash überschreiben. hash.except! verändert z. B. das Hash der Variablen hash.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.