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

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

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


person Mohit Jain    schedule 24.12.2010    source источник


Ответы (8)


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

session.key?("user")
person sepp2k    schedule 24.12.2010
comment
хорошо: строковый аксессор работает и для анализируемых объектов JSON. parse :) - person Bijan; 08.08.2016
comment
У меня это не работает, вместо этого работал метод: user - person Akash Agarwal; 22.03.2017

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

hash.key?(some_key)
person Bozhidar Batsov    schedule 21.08.2013
comment
Хорошая ссылка на этот запрос на изменение и последующий ответ от Матца. - person Joshua Pinter; 10.09.2015
comment
Кто-нибудь знает наверняка? - person codeforester; 13.01.2017

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

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

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

{'a' => 2}.key?(:a)
=> false
person installero    schedule 13.03.2015
comment
Предположительно существовало еще в Ruby 1.6: ruby-doc.com/ docs / ProgrammingRuby / html / (возможно, раньше, не знаю, где проверить документированное) - person Beni Cherniavsky-Paskin; 28.06.2016

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

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"] будут указывать на одну и ту же запись

person G.B    schedule 17.06.2014
comment
Если вы используете Rails, вы можете использовать Hash#with_indifferent_access, чтобы избежать этого; оба :my_key и "my_key" будут указывать на одну и ту же запись - person Devon Parsons; 06.04.2016

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

hash = {one: 1, two: 2}

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

hash.member?(:five)
#=> false
person Arvind singh    schedule 07.02.2019

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

В противном случае он вернет вам false

hash =  { one: 1, two:2 }

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

hash.key?(:four)
#=> false
person Deepak Mahakale    schedule 14.08.2016

В Rails 5 метод has_key? проверяет, существует ли ключ в хэше. Синтаксис для его использования:

YourHash.has_key? :yourkey
person Ahmad MOUSSA    schedule 04.02.2020

Вы можете использовать hash.keys.include? (Ключ)

irb(main):001:0> hash = {"pot" => 1, "tot" => 2, "not" => 3}
=> {"pot"=>1, "tot"=>2, "not"=>3}
irb(main):002:0> key = "not"
=> "not"
irb(main):003:0> hash.keys.include?(key)
=> true
person updraft    schedule 23.10.2020
comment
hash.has_key? (: key) звучит намного лучше - person Aaqib; 06.07.2021