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. |