Ruby - Hash

Un hash è una raccolta di coppie chiave-valore come questa: "dipendente" => "stipendio". È simile a un array, tranne per il fatto che l'indicizzazione viene eseguita tramite chiavi arbitrarie di qualsiasi tipo di oggetto, non un indice intero.

L'ordine in cui attraversi un hash per chiave o valore può sembrare arbitrario e generalmente non sarà nell'ordine di inserimento. Se tenti di accedere a un hash con una chiave che non esiste, il metodo restituirà nil .

Creazione di hash

Come con gli array, esiste una varietà di modi per creare hash. Puoi creare un hash vuoto con il nuovo metodo di classe -

months = Hash.new

Puoi anche usare new per creare un hash con un valore predefinito, che altrimenti è solo nullo -

months = Hash.new( "month" )

or

months = Hash.new "month"

Quando accedi a qualsiasi chiave in un hash che ha un valore predefinito, se la chiave o il valore non esiste, l'accesso all'hash restituirà il valore predefinito -

#!/usr/bin/ruby

months = Hash.new( "month" )

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

Questo produrrà il seguente risultato:

month
month

#!/usr/bin/ruby

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

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

Questo produrrà il seguente risultato:

100
200

Puoi usare qualsiasi oggetto Ruby come chiave o valore, anche un array, quindi il seguente esempio è valido:

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

Metodi incorporati di hash

Abbiamo bisogno di un'istanza dell'oggetto Hash per chiamare un metodo Hash. Come abbiamo visto, di seguito è riportato il modo per creare un'istanza dell'oggetto Hash:

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

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

Questo restituirà un nuovo hash popolato con gli oggetti dati. Ora utilizzando l'oggetto creato, possiamo chiamare qualsiasi metodo di istanza disponibile. Ad esempio:

#!/usr/bin/ruby

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

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

Questo produrrà il seguente risultato:

["1", "2"]

Di seguito sono riportati i metodi hash pubblici (supponendo che hash sia un oggetto array):

Sr.No. Metodi e descrizione
1

hash == other_hash

Verifica se due hash sono uguali, in base al fatto che abbiano lo stesso numero di coppie chiave-valore e se le coppie chiave-valore corrispondono alla coppia corrispondente in ogni hash.

2

hash.[key]

Utilizzando una chiave, fa riferimento a un valore da hash. Se la chiave non viene trovata, restituisce un valore predefinito.

3

hash.[key] = value

Associa il valore dato da valore con la chiave data da chiave .

4

hash.clear

Rimuove tutte le coppie chiave-valore da hash.

5

hash.default(key = nil)

Restituisce il valore predefinito per hash , nil se non impostato di default =. ([] restituisce un valore predefinito se la chiave non esiste in hash .)

6

hash.default = obj

Imposta un valore predefinito per hash .

7

hash.default_proc

Restituisce un blocco se l' hash è stato creato da un blocco.

8

hash.delete(key) [or]

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

Elimina una coppia chiave-valore da hash per chiave . Se viene utilizzato blocco, restituisce il risultato di un blocco se la coppia non viene trovata. Confronta delete_if .

9

hash.delete_if { |key,value| block }

Elimina una coppia chiave-valore da hash per ogni coppia che il blocco restituisce come vera .

10

hash.each { |key,value| block }

Itera su hash , chiamando il blocco una volta per ogni chiave, passando il valore-chiave come matrice a due elementi.

11

hash.each_key { |key| block }

Itera su hash , chiamando il blocco una volta per ogni chiave, passando la chiave come parametro.

12

hash.each_key { |key_value_array| block }

Itera su hash , chiamando il blocco una volta per ogni chiave , passando la chiave e il valore come parametri.

13

hash.each_key { |value| block }

Itera su hash , chiamando il blocco una volta per ogni chiave , passando il valore come parametro.

14

hash.empty?

Verifica se l'hash è vuoto (non contiene coppie chiave-valore) e restituisce vero o falso .

15

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

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

Restituisce un valore da hash per la chiave data . Se la chiave non può essere trovata e non ci sono altri argomenti, solleva un'eccezione IndexError ; se viene fornito il valore predefinito , viene restituito; se viene specificato il blocco opzionale, viene restituito il suo risultato.

16

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

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

Verifica se una determinata chiave è presente nell'hash, restituendo vero o falso .

17

hash.has_value?(value)

Verifica se l'hash contiene il valore specificato .

18

hash.index(value)

Restituisce la chiave per il valore dato in hash, nil se non viene trovato alcun valore corrispondente.

19

hash.indexes(keys)

Restituisce un nuovo array costituito da valori per le chiavi fornite. Inserirà il valore predefinito per le chiavi che non vengono trovate. Questo metodo è deprecato. Usa seleziona.

20

hash.indices(keys)

Restituisce un nuovo array costituito da valori per le chiavi fornite. Inserirà il valore predefinito per le chiavi che non vengono trovate. Questo metodo è deprecato. Usa seleziona.

21

hash.inspect

Restituisce una bella versione di stringa di stampa di hash.

22

hash.invert

Crea un nuovo hash , invertendo chiavi e valori da hash ; ovvero, nel nuovo hash, le chiavi di hash diventano valori ei valori diventano chiavi.

23

hash.keys

Crea un nuovo array con chiavi da hash .

24

hash.length

Restituisce la dimensione o la lunghezza dell'hash come numero intero.

25

hash.merge(other_hash) [or]

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

Restituisce un nuovo hash contenente il contenuto di hash e other_hash , sovrascrivendo le coppie in hash con chiavi duplicate con quelle di other_hash .

26

hash.merge!(other_hash) [or]

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

Uguale all'unione, ma le modifiche vengono apportate sul posto.

27

hash.rehash

Ricostruisce l' hash in base ai valori correnti per ogni chiave . Se i valori sono cambiati da quando sono stati inseriti, questo metodo reindicizza l' hash .

28

hash.reject { |key, value| block }

Crea un nuovo hash per ogni coppia che il blocco valuta come true

29

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

Uguale a Rifiuta , ma le modifiche vengono apportate sul posto.

30

hash.replace(other_hash)

Sostituisce il contenuto di hash con il contenuto di other_hash .

31

hash.select { |key, value| block }

Restituisce un nuovo array costituito da coppie chiave-valore da hash per cui il blocco restituisce true .

32

hash.shift

Rimuove una coppia chiave-valore da hash , restituendola come un array di due elementi.

33

hash.size

Restituisce la dimensione o la lunghezza dell'hash come numero intero.

34

hash.sort

Converte l' hash in un array bidimensionale contenente array di coppie chiave-valore, quindi lo ordina come array.

35

hash.store(key, value)

Memorizza una coppia chiave-valore in hash .

36

hash.to_a

Crea un array bidimensionale da hash. Ogni coppia chiave / valore viene convertita in un array e tutti questi array vengono archiviati in un array contenitore.

37

hash.to_hash

Restituisce hash (self).

38

hash.to_s

Converte l' hash in un array, quindi converte quell'array in una stringa.

39

hash.update(other_hash) [or]

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

Restituisce un nuovo hash contenente il contenuto di hash e other_hash , sovrascrivendo le coppie in hash con chiavi duplicate con quelle di other_hash .

40

hash.value?(value)

Verifica se l' hash contiene il valore specificato .

41

hash.values

Restituisce un nuovo array contenente tutti i valori di hash .

42

hash.values_at(obj, ...)

Restituisce un nuovo array contenente i valori di hash associati alla chiave o alle chiavi fornite.