Ruby Hash

Ein Hash ist eine Sammlung von Schlüssel-Wert-Paaren wie "key" => "value". Hashes ähneln Arrays, außer dass ihre Indizes nicht auf Zahlen beschränkt sind.

Hash-Indizes (oder "Schlüssel") können nahezu jedes Objekt sein.

Obwohl Hash einem Array ähnelt, gibt es einen wichtigen Unterschied: Hash-Elemente haben keine bestimmte Reihenfolge. Wenn die Reihenfolge wichtig ist, sollten Sie ein Array verwenden.

Hashes erstellen

Wie bei Arrays gibt es verschiedene Möglichkeiten, einen Hash zu erstellen. Sie können einen leeren Hash über dienewKlassenmethode erstellen:

months = Hash.new

Sie können auchnewverwenden, um einen Hash mit einem Standardwert zu erstellen. Ein Hash ohne Standardwert istnil:

months = Hash.new( "month" )odermonths = Hash.new "month"

Wenn Sie auf einen beliebigen Schlüssel in einem Hash mit einem Standardwert zugreifen und der Schlüssel oder Wert nicht existiert, gibt der Hash den Standardwert zurück:

Beispiel

#!/usr/bin/ruby months = Hash.new( "month" ) puts "#{months[0]}" puts "#{months[72]}"

Ausprobieren »

Die Ausgabe des obigen Beispiels ist:

month
month

Beispiel

#!/usr/bin/ruby H = Hash["a" => 100, "b" => 200] puts "#{H['a']}" puts "#{H['b']}"

Ausprobieren »

Die Ausgabe des obigen Beispiels ist:

100
200

Sie können jedes Ruby-Objekt als Schlüssel oder Wert verwenden und sogar ein Array benutzen, wie im folgenden Beispiel gezeigt:

[1,"jan"] => "Januar"

Integrierte Hash-Methoden

Um Hash-Methoden aufzurufen, müssen Sie zuerst ein Hash-Objekt instanziieren. Hier sind die Möglichkeiten, eine Hash-Objektinstanz zu erstellen:

Hash[[key =>|, value]* ] oder Hash.new [oder] Hash.new(obj) [oder] Hash.new { |hash, key| block }

Dies gibt einen neuen Hash zurück, der mit dem angegebenen Objekt gefüllt ist. Nun können wir mit dem erstellten Objekt jede verfügbare Methode aufrufen. Zum Beispiel:

Beispiel

#!/usr/bin/ruby $, = ", " months = Hash.new( "month" ) months = {"1" => "January", "2" => "February"} keys = months.keys puts "#{keys}"

Ausprobieren »

Die Ausgabe des obigen Beispiels ist:

["1", "2"]

Die folgenden sind öffentliche Hash-Methoden (angenommen,hashhash ist ein Hash-Objekt):

Nein.Methode & Beschreibung
1hash == other_hash
Prüft, ob zwei Hashes die gleiche Anzahl von Schlüssel-Wert-Paaren haben und ob die Schlüssel-Wert-Paare übereinstimmen, um festzustellen, ob die beiden Hashes gleich sind.
2hash[key]
Verwendet einen Schlüssel, um auf einen Wert aus dem Hash zu verweisen. Wenn der Schlüssel nicht gefunden wird, wird der Standardwert zurückgegeben.
3hash[key]=value
holdvalueDer gegebene Wert wird demkeygegebenen Schlüssel zugeordnet.
4hash.clear
Entfernt alle Schlüssel-Wert-Paare aus dem Hash.
5hash.default(key = nil)
Gibthashden Standardwert von hash zurück, oder nil, wenn er nicht über default= gesetzt wurde. (Wenn der Schlüssel nicht inhashhash vorhanden ist, gibt [] einen Standardwert zurück.)
6hash.default = obj
isthashLegt den Standardwert fest.
7hash.default_proc
Wennhashhash mit einem Block erstellt wurde, gibt er den Block zurück.
8hash.delete(key) [oder]
array.delete(key) { |key| block }

LöschtSchlüsselaushashSchlüssel-Wert-Paare aus hash nach Schlüssel. Wenn ein Block verwendet wird und kein passendes Schlüssel-Wert-Paar gefunden wird, wird das Ergebnis des Blocks zurückgegeben. Vergleiche es mitdelete_ifdelete_if.
9hash.delete_if { |key,value| block }
Für jeden Block, bei demtruezu true ausgewertet wird, werden Schlüssel-Wert-Paare aushashhash gelöscht.
10hash.each { |key,value| block }
Iteriert überhashhash, ruft für jedenSchlüsselblock einmal auf und übergibt Schlüssel-Wert als zweielementiges Array.
11hash.each_key { |key| block }
Iteriert überhashhash, ruft für jedenSchlüsselblock einmal auf und übergibtSchlüsselSchlüssel als Argument.
12hash.each_key { |key_value_array| block }
Iteriert überhashhash, ruft für jedenSchlüsselblock einmal auf und übergibtSchlüsselundWertWert als Argument.
13hash.each_value { |value| block }
Iteriert überhashhash, ruft für jedenSchlüsselblock einmal auf und übergibtWertSchlüssel-Wert als Argumente.
14hash.empty?
Prüft, ob der Hash leer ist (keine Schlüssel-Wert-Paare enthält), gibttrueoderfalse zurück。
15hash.fetch(key [, default] ) [oder]
hash.fetch(key) { | key | block }

Für den gegebenenkeyaushashkey, gibt einen Wert zurück. Wenn kein Schlüssel gefunden wirdkeyund keine anderen Argumente angegeben sind, wird eineIndexErrorAusnahme ausgelöst; wenndefaultdefault angegeben ist, wirddefault zurückgegebendefault; wenn ein optionaler Block angegeben ist, wird das Ergebnis des Blocks zurückgegeben.
16hash.has_key?(key) [oder] hash.include?(key) [oder]
hash.key?(key) [oder] hash.member?(key)

Prüft, ob der angegebenekeykey im Hash existiert, gibttrueoderfalse zurück。
17hash.has_value?(value)
Prüft, ob der Hash den angegebenenvalue enthält。
18hash.index(value)
Für den gegebenenWertWert, gibt den Schlüssel im hashSchlüsselzurück, wenn kein passender Wert gefunden wird, gibt nil zurück.nil。
19hash.indexes(keys)
Gibt ein neues Array zurück, das aus den Werten für die angegebenen Schlüssel besteht. Der Standardwert wird für nicht gefundene Schlüssel eingefügt. Diese Methode ist veraltet; bitte verwenden Sie select.
20hash.indices(keys)
Gibt ein neues Array zurück, das aus den Werten für die angegebenen Schlüssel besteht. Der Standardwert wird für nicht gefundene Schlüssel eingefügt. Diese Methode ist veraltet; bitte verwenden Sie select.
21hash.inspect
Gibt eine druckbare String-Version des hash zurück.
22hash.invert
Erstellt einen neuenhashhash, wobeihashdie Schlüssel/Werte inSchlüssel invertiert werdenundWertehash. Das heißt, im neuen hash,hashwerden die Schlüssel im hash zu Werten und Werte zu Schlüsseln.
23hash.keys
Erstellt ein neues Array, das die Schlüssel inhashhash enthält.
24hash.length
Gibt die Größe oder Länge vonhashhash als Ganzzahl zurück.
25hash.merge(other_hash) [oder]
hash.merge(other_hash) { |key, oldval, newval| block }

Gibt einen neuen Hash zurück, der den Inhalt vonhashundother_hashhash enthält und die Schlüssel-Wert-Paare in hash, die doppelte Schlüssel haben, mitother_hash überschreibt.other_hash.
26hash.merge!(other_hash) [oder]
hash.merge!(other_hash) { |key, oldval, newval| block }

Wie merge, aber der Hash ändert sich tatsächlich.
27hash.rehash
Erstellt hash anhand des aktuellen Werts jedeskeykey neu. Wenn sich Werte nach dem Einfügen ändern, indiziert diese Methodehashhash neu.hash。
28hash.reject { |key, value| block }
Ähnlich wie delete_if, aber arbeitet mit einer Kopie des Hashes. Entspricht hsh.dup.delete_if.
29hash.reject! { |key, value| block }
Äquivalent zu delete_if, gibt aber nil zurück, wenn keine Änderungen vorgenommen werden.
30hash.replace(other_hash)
haltenhashErsetzt den Inhalt vonother_hashhash durch den Inhalt von
31hash.select { |key, value| block }
Gibt ein neues Array zurück, bestehend ausblockden Schlüssel-Wert-Paaren intruevonhashhash.
32hash.shift
aushashEntfernt ein Schlüssel-Wert-Paar aus hash und gibt es als zweielementiges Array zurück.
33hash.size
Gibt die Größe oder Länge vonhashvonsizehash als Integer zurück.
34hash.sort
holdhashKonvertiert in ein zweidimensionales Array, das Arrays aus Schlüssel-Wert-Paaren enthält, und sortiert es dann.
35hash.store(key, value)
Speicherthashein Schlüssel-Wert-Paar in hash.
36hash.to_a
Erstellt ein zweidimensionales Array aus hash. Jedes Schlüssel-Wert-Paar wird in ein Array konvertiert, und all diese Arrays werden in einem Array gespeichert.
37hash.to_hash
Gibthash(self) zurück.
38hash.to_s
holdhashhash in ein Array konvertiert, dann dieses Array in einen String konvertiert.
39hash.update(other_hash) [or]
hash.update(other_hash) {|key, oldval, newval| block}

Gibt einen neuen Hash zurück, der den Inhalt vonhashundother_hashhash enthält, wobeihash überschrieben wirddie Schlüssel-Wert-Paare in hash, die doppelte Schlüssel mitother_hashother_hash aufweisen.
40hash.value?(value)
Prüft, obhashhash den angegebenenvalue enthält。
41hash.values
Gibt ein neues Array zurück, das alle Werte vonhashhash enthält.
42hash.values_at(obj, ...)
Gibt ein neues Array zurück, das die Werte inhashhash enthält, die den angegebenen Schlüsseln zugeordnet sind.
Andere Erweiterungen