Как проверить, присутствует ли определенный ключ в хэше или нет? - PullRequest
576 голосов
/ 25 декабря 2010

Я хочу проверить, присутствует ли ключ пользователя в хэше сеанса.Как я могу это сделать?

Обратите внимание, что я не хочу проверять, является ли значение ключа нулевым или нет.Я просто хочу проверить, присутствует ли «пользовательская» клавиша .

Ответы [ 6 ]

863 голосов
/ 25 декабря 2010
Метод

Hash key? сообщает вам, присутствует ли данный ключ или нет.

session.key?("user")
275 голосов
/ 21 августа 2013

Пока Hash#has_key? выполняет работу, как отмечает Мэтц здесь , она устарела в пользу Hash#key?.

hash.key?(some_key)
36 голосов
/ 13 марта 2015

В последних версиях Ruby экземпляр Hash имеет метод key?:

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

Обязательно используйте символьный ключ или строковый ключ в зависимости от того, что у вас есть в вашем хэше:

{'a' => 2}.key?(:a)
=> false
27 голосов
/ 17 июня 2014

Очень поздно, но желательно, чтобы в качестве ключа использовались символы:

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 

Но при создании хэша, если вы передаете строку как ключ, он будет искать строку в ключах.* Но при создании хеша вы передаете символ как ключ, затем has_key?будет искать ключи с помощью символа.


Если вы используете Rails, вы можете использовать Hash#with_indifferent_access, чтобы избежать этого;hash[:my_key] и hash["my_key"] будут указывать на одну и ту же запись

4 голосов
/ 14 августа 2016

Вы всегда можете использовать Hash#key?, чтобы проверить, присутствует ли ключ в хэше или нет.

Если не вернет вам false

hash =  { one: 1, two:2 }

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

hash.key?(:four)
#=> false
2 голосов
/ 07 февраля 2019

Другой способ здесь

hash = {one: 1, two: 2}

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

hash.member?(:five)
#=> false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...