Comment vérifier si une clé spécifique est présente dans un hachage ou non?


636

Je veux vérifier si la clé "utilisateur" est présente ou non dans le hachage de session. Comment puis-je faire ceci?

Notez que je ne veux pas vérifier si la valeur de la clé est nulle ou non. Je veux juste vérifier si la clé "utilisateur" est présente.

Réponses:


952

HashLa key?méthode de vous indique si une clé donnée est présente ou non.

session.key?("user")

nice: l'accessoire "string" fonctionne aussi pour les objets analysés JSON.parse :)
Bijan

2
Cela ne fonctionne pas pour moi, la méthode: user a plutôt fonctionné
Akash Agarwal

295

Bien Hash#has_key?que le travail soit fait, comme le note Matz ici , il a été déconseillé en faveur de Hash#key?.

hash.key?(some_key)

1
Belle référence à cette demande de changement et à la réponse ultérieure de Matz.
Joshua Pinter

Quelqu'un est-il sûr?
codeforester


28

Il est très tard mais de préférence des symboles doivent être utilisés comme clé:

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 

Mais lorsque vous créez un hachage si vous passez une chaîne comme clé, il recherchera la chaîne dans les clés.

Mais lors de la création du hachage, vous passez le symbole comme clé, puis has_key? recherchera les clés en utilisant le symbole.


Si vous utilisez Rails, vous pouvez utiliser Hash#with_indifferent_accesspour éviter cela; à la fois hash[:my_key]et hash["my_key"]pointera vers le même record


6
Si vous utilisez Rails, vous pouvez utiliser Hash#with_indifferent_accesspour éviter cela; les deux :my_keyet "my_key"pointeront vers le même record
Devon Parsons

5

Vous pouvez toujours utiliser Hash#key?pour vérifier si la clé est présente dans un hachage ou non.

Sinon, il vous reviendra false

hash =  { one: 1, two:2 }

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

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

3

Une autre façon est ici

hash = {one: 1, two: 2}

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

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

0

Dans Rails 5, la clé has_key? vérifie si la clé existe dans le hachage. La syntaxe pour l'utiliser est:

YourHash.has_key? :yourkey
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.