Как проверить, присутствует ли конкретный ключ в хэше или нет?


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

обратите внимание, что я не хочу проверять, равно ли значение ключа nil или нет. Я просто хочу проверить, является ли "пользователь" ключ присутствует.

5 517

5 ответов:

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

session.key?("user")

пока Hash#has_key? получает работу, как отмечает МАЦ здесь, он был осужден в пользу Hash#key?.

hash.key?(some_key)

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

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

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

{'a' => 2}.key?(:a)
=> false

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

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? будет искать ключи с помощью символа.


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

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

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

hash =  { one: 1, two:2 }

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

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