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.

Mohit Jain
la source

Réponses:

952

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

session.key?("user")
sepp2k
la source
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)
Bozhidar Batsov
la source
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
41

Dans les dernières versions de Ruby, l'instance Hash a une key?méthode:

{a: 1}.key?(:a)
=> true

Veillez à utiliser la clé de symbole ou une clé de chaîne en fonction de ce que vous avez dans votre hachage:

{'a' => 2}.key?(:a)
=> false
installero
la source
2
A existé dès Ruby 1.6: ruby-doc.com/docs/ProgrammingRuby/html/… (peut-être plus tôt, ne sait pas où vérifier documenté)
Beni Cherniavsky-Paskin
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

GB
la source
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
Deepak Mahakale
la source
3

Une autre façon est ici

hash = {one: 1, two: 2}

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

hash.member?(:five)
#=> false
Arvind singh
la source
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
BinaryMan
la source