Comment vérifier si une clé spécifique est présente dans un hash 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 la clé “user” est présente.

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

     session.key?("user") 

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

     hash.key?(some_key) 

    Dans les dernières versions de Ruby, l’instance de 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 

    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 hash, vous passez le symbole en tant que clé, puis has_key? va rechercher 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"] le même enregistrement

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

    Sinon il vous rendra false

     hash = { one: 1, two:2 } hash.key?(:one) #=> true hash.key?(:four) #=> false