Rubin - Hashes

Ein Hash ist eine Sammlung von Schlüssel-Wert-Paaren wie folgt: "Mitarbeiter" => "Gehalt". Es ähnelt einem Array, außer dass die Indizierung über beliebige Schlüssel eines beliebigen Objekttyps und nicht über einen ganzzahligen Index erfolgt.

Die Reihenfolge, in der Sie einen Hash nach Schlüssel oder Wert durchlaufen, scheint willkürlich zu sein und liegt im Allgemeinen nicht in der Einfügereihenfolge. Wenn Sie versuchen, mit einem nicht vorhandenen Schlüssel auf einen Hash zuzugreifen, gibt die Methode nil zurück .

Hashes erstellen

Wie bei Arrays gibt es verschiedene Möglichkeiten, Hashes zu erstellen. Sie können mit der neuen Klassenmethode einen leeren Hash erstellen -

months = Hash.new

Sie können auch new verwenden , um einen Hash mit einem Standardwert zu erstellen, der ansonsten nur null ist -

months = Hash.new( "month" )

or

months = Hash.new "month"

Wenn Sie auf einen Schlüssel in einem Hash mit einem Standardwert zugreifen und der Schlüssel oder Wert nicht vorhanden ist, wird beim Zugriff auf den Hash der Standardwert zurückgegeben.

#!/usr/bin/ruby

months = Hash.new( "month" )

puts "#{months[0]}"
puts "#{months[72]}"

Dies führt zu folgendem Ergebnis:

month
month

#!/usr/bin/ruby

H = Hash["a" => 100, "b" => 200]

puts "#{H['a']}"
puts "#{H['b']}"

Dies führt zu folgendem Ergebnis:

100
200

Sie können jedes Ruby-Objekt als Schlüssel oder Wert verwenden, auch als Array. Das folgende Beispiel ist also gültig -

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

Integrierte Hash-Methoden

Wir benötigen eine Instanz des Hash-Objekts, um eine Hash-Methode aufzurufen. Wie wir gesehen haben, können Sie im Folgenden eine Instanz des Hash-Objekts erstellen:

Hash[[key =>|, value]* ] or

Hash.new [or] Hash.new(obj) [or]
Hash.new { |hash, key| block }

Dies gibt einen neuen Hash zurück, der mit den angegebenen Objekten gefüllt ist. Mit dem erstellten Objekt können wir nun alle verfügbaren Instanzmethoden aufrufen. Zum Beispiel -

#!/usr/bin/ruby

$, = ", "
months = Hash.new( "month" )
months = {"1" => "January", "2" => "February"}

keys = months.keys
puts "#{keys}"

Dies führt zu folgendem Ergebnis:

["1", "2"]

Im Folgenden sind die öffentlichen Hash-Methoden aufgeführt (vorausgesetzt, Hash ist ein Array-Objekt).

Sr.Nr. Methoden & Beschreibung
1

hash == other_hash

Testet, ob zwei Hashes gleich sind, basierend darauf, ob sie die gleiche Anzahl von Schlüssel-Wert-Paaren haben und ob die Schlüssel-Wert-Paare mit dem entsprechenden Paar in jedem Hash übereinstimmen.

2

hash.[key]

Verweist mit einem Schlüssel auf einen Wert aus dem Hash. Wenn der Schlüssel nicht gefunden wird, wird ein Standardwert zurückgegeben.

3

hash.[key] = value

Ordnet den durch value angegebenen Wert dem durch key angegebenen Schlüssel zu .

4

hash.clear

Entfernt alle Schlüssel-Wert-Paare aus dem Hash.

5

hash.default(key = nil)

Gibt den Standardwert für Hash zurück , nil, wenn nicht standardmäßig = festgelegt. ([] gibt einen Standardwert zurück, wenn der Schlüssel nicht im Hash vorhanden ist .)

6

hash.default = obj

Legt einen Standardwert für Hash fest .

7

hash.default_proc

Gibt einen Block zurück, wenn ein Hash von einem Block erstellt wurde.

8

hash.delete(key) [or]

array.delete(key) { |key| block }

Löscht ein Schlüssel-Wert-Paar aus Hash für Schlüssel . Wenn ein Block verwendet wird, wird das Ergebnis eines Blocks zurückgegeben, wenn kein Paar gefunden wird. Vergleiche delete_if .

9

hash.delete_if { |key,value| block }

Löscht ein Schlüssel-Wert-Paar aus dem Hash für jedes Paar, das der Block als wahr auswertet .

10

hash.each { |key,value| block }

Iteriert über Hash , ruft den Block einmal für jeden Schlüssel auf und übergibt den Schlüsselwert als Array mit zwei Elementen.

11

hash.each_key { |key| block }

Iteriert über Hash , ruft den Block einmal für jeden Schlüssel auf und übergibt den Schlüssel als Parameter.

12

hash.each_key { |key_value_array| block }

Iteriert über Hash , ruft den Block für jeden Schlüssel einmal auf und übergibt den Schlüssel und den Wert als Parameter.

13

hash.each_key { |value| block }

Iteriert über Hash , ruft den Block für jeden Schlüssel einmal auf und übergibt den Wert als Parameter.

14

hash.empty?

Testet, ob der Hash leer ist (enthält keine Schlüssel-Wert-Paare) und gibt true oder false zurück .

15

hash.fetch(key [, default] ) [or]

hash.fetch(key) { | key | block }

Gibt einen Wert aus dem Hash für den angegebenen Schlüssel zurück . Wenn der Schlüssel nicht gefunden werden kann und keine anderen Argumente vorhanden sind, wird eine IndexError- Ausnahme ausgelöst . Wenn der Standardwert angegeben ist, wird er zurückgegeben. Wenn der optionale Block angegeben wird, wird sein Ergebnis zurückgegeben.

16

hash.has_key?(key) [or] hash.include?(key) [or]

hash.key?(key) [or] hash.member?(key)

Testet, ob ein bestimmter Schlüssel im Hash vorhanden ist, und gibt true oder false zurück .

17

hash.has_value?(value)

Testet, ob der Hash den angegebenen Wert enthält .

18

hash.index(value)

Gibt den Schlüssel für den angegebenen Wert in Hash zurück, nil, wenn kein übereinstimmender Wert gefunden wird.

19

hash.indexes(keys)

Gibt ein neues Array zurück, das aus Werten für die angegebenen Schlüssel besteht. Fügt den Standardwert für Schlüssel ein, die nicht gefunden wurden. Diese Methode ist veraltet. Verwenden Sie select.

20

hash.indices(keys)

Gibt ein neues Array zurück, das aus Werten für die angegebenen Schlüssel besteht. Fügt den Standardwert für Schlüssel ein, die nicht gefunden wurden. Diese Methode ist veraltet. Verwenden Sie select.

21

hash.inspect

Gibt eine hübsche Druckzeichenfolgenversion von Hash zurück.

22

hash.invert

Erstellt einen neuen Hash , in dem Schlüssel und Werte aus dem Hash invertiert werden . Das heißt, im neuen Hash werden die Schlüssel aus dem Hash zu Werten und die Werte zu Schlüsseln.

23

hash.keys

Erstellt ein neues Array mit Schlüsseln aus Hash .

24

hash.length

Gibt die Größe oder Länge des Hash als Ganzzahl zurück.

25

hash.merge(other_hash) [or]

hash.merge(other_hash) { |key, oldval, newval| block }

Gibt einen neuen Hash zurück, der den Inhalt von Hash und other_hash enthält , wobei Paare in Hash mit doppelten Schlüsseln mit denen von other_hash überschrieben werden .

26

hash.merge!(other_hash) [or]

hash.merge!(other_hash) { |key, oldval, newval| block }

Entspricht dem Zusammenführen, jedoch werden Änderungen vorgenommen.

27

hash.rehash

Erstellt einen Hash basierend auf den aktuellen Werten für jeden Schlüssel neu . Wenn sich die Werte seit dem Einfügen geändert haben, indiziert diese Methode den Hash neu .

28

hash.reject { |key, value| block }

Erstellt einen neuen Hash für jedes Paar, das der Block als wahr bewertet

29

hash.reject! { |key, value| block }

Entspricht der Ablehnung , es werden jedoch Änderungen vorgenommen.

30

hash.replace(other_hash)

Ersetzt den Inhalt von Hash durch den Inhalt von other_hash .

31

hash.select { |key, value| block }

Gibt ein neues Array zurück, das aus Schlüssel-Wert-Paaren aus dem Hash besteht, für das der Block true zurückgibt .

32

hash.shift

Entfernt ein Schlüssel-Wert-Paar aus dem Hash und gibt es als Array mit zwei Elementen zurück.

33

hash.size

Gibt die Größe oder Länge des Hash als Ganzzahl zurück.

34

hash.sort

Konvertiert Hash in ein zweidimensionales Array, das Arrays von Schlüssel-Wert-Paaren enthält, und sortiert es dann als Array.

35

hash.store(key, value)

Speichert ein Schlüssel-Wert-Paar in Hash .

36

hash.to_a

Erstellt ein zweidimensionales Array aus Hash. Jedes Schlüssel / Wert-Paar wird in ein Array konvertiert, und alle diese Arrays werden in einem enthaltenden Array gespeichert.

37

hash.to_hash

Gibt Hash (Selbst) zurück.

38

hash.to_s

Konvertiert Hash in ein Array und konvertiert dieses Array dann in eine Zeichenfolge.

39

hash.update(other_hash) [or]

hash.update(other_hash) {|key, oldval, newval| block}

Gibt einen neuen Hash zurück, der den Inhalt von Hash und other_hash enthält , wobei Paare in Hash mit doppelten Schlüsseln mit denen von other_hash überschrieben werden .

40

hash.value?(value)

Testet, ob der Hash den angegebenen Wert enthält .

41

hash.values

Gibt ein neues Array zurück, das alle Werte von Hash enthält .

42

hash.values_at(obj, ...)

Gibt ein neues Array zurück, das die Werte aus dem Hash enthält , die dem angegebenen Schlüssel oder den angegebenen Schlüsseln zugeordnet sind.