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" .
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:
Hash
Il key?
metodo ti dice se una determinata chiave è presente o meno.
session.key?("user")
Mentre Hash#has_key?
fa il lavoro, come osserva Matz qui , è stato deprecato a favore Hash#key?
.
hash.key?(some_key)
Nelle ultime versioni di Ruby, l'istanza di Hash ha un key?
metodo:
{a: 1}.key?(:a)
=> true
Assicurati di utilizzare la chiave simbolo o una chiave stringa in base a ciò che hai nel tuo hash:
{'a' => 2}.key?(:a)
=> false
È 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_access
per evitarlo; entrambi hash[:my_key]
e hash["my_key"]
indicheranno lo stesso record
Hash#with_indifferent_access
per evitarlo; entrambi :my_key
e "my_key"
indicheranno lo stesso record
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
Un altro modo è qui
hash = {one: 1, two: 2}
hash.member?(:one)
#=> true
hash.member?(:five)
#=> false