Я хочу проверить, присутствует ли "пользовательский" ключ в хэше сеанса. Как я могу это сделать?
Обратите внимание, что я не хочу проверять, равно ли значение ключа нулю. Я просто хочу проверить, присутствует ли «пользовательский» ключ.
Я хочу проверить, присутствует ли "пользовательский" ключ в хэше сеанса. Как я могу это сделать?
Обратите внимание, что я не хочу проверять, равно ли значение ключа нулю. Я просто хочу проверить, присутствует ли «пользовательский» ключ.
Метод key?
Hash
сообщает вам, присутствует ли данный ключ или нет.
session.key?("user")
Пока Hash#has_key?
выполняет свою работу, как отмечает Матц здесь он устарел и заменен на Hash#key?
.
hash.key?(some_key)
В последних версиях Ruby экземпляр Hash имеет метод 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? будет искать ключи с помощью символа.
Если вы используете Rails, вы можете использовать Hash#with_indifferent_access
, чтобы избежать этого; оба hash[:my_key]
и hash["my_key"]
будут указывать на одну и ту же запись
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
Вы всегда можете использовать Hash#key?
, чтобы проверить, присутствует ли ключ в хэше или нет.
В противном случае он вернет вам false
hash = { one: 1, two:2 }
hash.key?(:one)
#=> true
hash.key?(:four)
#=> false
В Rails 5 метод has_key? проверяет, существует ли ключ в хэше. Синтаксис для его использования:
YourHash.has_key? :yourkey
Вы можете использовать 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