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.
La méthode key?
de Hash
vous indique si une clé donnée est présente ou non.
session.key?("user")
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)
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
_
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
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
Une autre façon est ici
hash = {one: 1, two: 2}
hash.member?(:one)
#=> true
hash.member?(:five)
#=> false