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


Je veux vérifier si la clé "user" est présente ou non dans le hash de la 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 le "utilisateur" clé est présent.


506
2017-12-24 22:02


origine


Réponses:


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

session.key?("user")

764
2017-12-24 22:09



Tandis que Hash#has_key? fait le travail, comme le note Matz ici, il a été déprécié en faveur de Hash#key?.

hash.key?(some_key)

253
2017-08-21 13:09



Dans les dernières versions de Ruby, l'instance Hash a un 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

27
2018-03-13 11:20



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

Mais lorsque vous créez un hachage, vous passez le symbole comme clé, puis has_key? va chercher les clés en utilisant le symbole.


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


25
2018-06-17 13:08



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

Sinon il vous rendra false

hash =  { one: 1, two:2 }

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

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

3
2017-08-14 16:13