web-dev-qa-db-fra.com

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

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 "l'utilisateur" clé est présent.

583
Mohit Jain

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

session.key?("user")
876
sepp2k

Alors que Hash#has_key? effectue le travail, comme le note Matz ici , il est déconseillé en faveur de Hash#key?.

hash.key?(some_key)
279
Bozhidar Batsov

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

_{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
_
36
installero

Il est très tard mais les symboles doivent de préférence ê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 lors de la création de hachage, si vous passez une chaîne en tant que clé, la chaîne sera recherchée dans les clés.

Mais lors de la création de hash, vous passez le symbole en tant que clé, puis has_key? cherchera les clés en utilisant le symbole.


Si vous utilisez Rails, vous pouvez utiliser Hash#with_indifferent_access pour éviter cela; hash[:my_key] et hash["my_key"] pointeront tous deux vers le même enregistrement

27
G.B

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

Sinon, il vous retournera false

hash =  { one: 1, two:2 }

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

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

Une autre façon est ici

hash = {one: 1, two: 2}

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

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