Come verificare se una chiave specifica è presente in un hash o no?


636

Voglio verificare se la chiave "utente" è presente o meno nell'hash della sessione. Come posso fare questo?

Nota che non voglio verificare se il valore della chiave è zero o meno. Voglio solo verificare se è presente il tasto "utente" .

Risposte:


952

HashIl key?metodo ti dice se una determinata chiave è presente o meno.

session.key?("user")

bello: l'accessorio "stringa" funziona anche per oggetti analizzati JSON.parse :)
Bijan

2
Questo non funziona per me, il: metodo utente ha funzionato invece
Akash Agarwal

295

Mentre Hash#has_key?fa il lavoro, come osserva Matz qui , è stato deprecato a favore Hash#key?.

hash.key?(some_key)

1
Bel riferimento a tale richiesta di modifica e successiva risposta di Matz.
Joshua Pinter,

Qualcuno lo sa per certo?
codeforester


28

È molto tardi ma preferibilmente i simboli dovrebbero essere usati come chiave:

my_hash = {}
my_hash[:my_key] = 'value'

my_hash.has_key?("my_key")
 => false 
my_hash.has_key?("my_key".to_sym)
 => true 

my_hash2 = {}
my_hash2['my_key'] = 'value'

my_hash2.has_key?("my_key")
 => true 
my_hash2.has_key?("my_key".to_sym)
 => false 

Ma quando si crea l'hash se si passa la stringa come chiave, cercherà la stringa nelle chiavi.

Ma quando crei l'hash passi il simbolo come chiave quindi has_key? cercherà le chiavi usando il simbolo.


Se stai usando Rails, puoi usarlo Hash#with_indifferent_accessper evitarlo; entrambi hash[:my_key]e hash["my_key"]indicheranno lo stesso record


6
Se stai usando Rails, puoi usarlo Hash#with_indifferent_accessper evitarlo; entrambi :my_keye "my_key"indicheranno lo stesso record
Devon Parsons il

5

Puoi sempre usare Hash#key?per verificare se la chiave è presente in un hash o no.

Altrimenti ti restituirà false

hash =  { one: 1, two:2 }

hash.key?(:one)
#=> true

hash.key?(:four)
#=> false

3

Un altro modo è qui

hash = {one: 1, two: 2}

hash.member?(:one)
#=> true

hash.member?(:five)
#=> false

0

In Rails 5, has_key? Il metodo controlla se la chiave esiste nell'hash. La sintassi per usarla è:

YourHash.has_key? :yourkey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.