Как проверить, присутствует ли конкретный ключ в хэше или нет?
Я хочу проверить, присутствует ли ключ" пользователь " или нет в хэше сеанса. Как я могу это сделать?
обратите внимание, что я не хочу проверять, равно ли значение ключа nil или нет. Я просто хочу проверить, является ли "пользователь" ключ присутствует.
5 ответов:
пока
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"]
будет указывать на ту же запись