Як перевірити, чи присутній певний ключ у хеші чи ні?


636

Я хочу перевірити, чи присутній ключ "користувача" у хесі сеансу чи ні. Як я можу це зробити?

Зауважте, що я не хочу перевіряти, чи є значення ключа нульовим чи ні. Я просто хочу перевірити, чи присутній ключ "користувача" .

Відповіді:


952

Hash«S key?метод говорить вам , чи присутній чи ні даний ключ.

session.key?("user")

приємно: "string" аксесуар працює і для JSON.parse, проаналізованих об'єктів :)
Bijan

2
Для мене це не працює, замість цього працював користувальницький метод
Акаш Агарвал


41

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

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

Обов’язково використовуйте клавішу символу або рядок, залежно від того, що у вас є хеш:

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

2
Очевидно, існували вже в Ruby 1.6: ruby-doc.com/docs/ProgrammingRuby/html/… (можливо, раніше, не знаю, де перевірити документально)
Бені Чернявський-Паскін

28

Дуже пізно, але бажано символи використовувати як ключові:

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


6
Якщо ви використовуєте Rails, ви можете використовувати, Hash#with_indifferent_accessщоб цього уникнути; обидва :my_keyі "my_key"вкажуть на той самий запис
Девон Парсонс

5

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

Якщо ні, то це поверне вас false

hash =  { one: 1, two:2 }

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

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


0

У Rails 5 has_key? метод перевіряє наявність ключа в хеші. Синтаксис для його використання:

YourHash.has_key? :yourkey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.