В Ruby в некоторых случаях требуется проверить, присутствует ли уже данный ключ в хеше.
Если вы новичок в хэшах, я написал основная статья в блоге о хешах Ruby.
Существует ли проверка ключа хеша в Ruby API?
Что делать, если вы хотите проверить, что данный хеш имеет заданный ключ? Прежде чем писать какой-либо код, первое, о чем вам следует подумать: «существует ли это уже где-то в API»?
Отсутствие служебной функции встречается очень редко — по историческим причинам отрывок может быть для JavaScript.
Но не для Ruby, тем более в среде Ruby-on-Rails.
Ядро Ruby: однострочный способ проверить, существует ли ключ
Для тех, кто уже знает Ruby, вот быстрый ответ.
1
$> my_hash.key?("my_key")
Ruby: проверьте наличие ключа, приведя к логическому значению.
Запустите консоль Ruby (в проекте Rails введите «bin/rails console»).
1
$> my_hash = {'a' => 40, a: 41, b: 'some_value'}
Кстати, обратите внимание, что строка 'a'
рассматривается как ключ, отличный от символа a:
Я хочу проверить, что ключ принадлежит my_hash, поэтому наивным подходом было бы использовать двойной !!
это преобразует любое значение в логическое значение. Этот трюк используется в других языках, таких как JavaScript.
1
2
3
4
5
6
7
8
$> my_hash[:b]
'some_value'
$> my_hash[:c]
nil
$> !!my_hash[:b]
false
$> !!my_hash[:c]
true
Более выразительный способ проверки наличия определенного ключа хеша Ruby.
Хэш Ruby имеет выразительный API для наиболее распространенных случаев использования. Вы можете использовать ключ .key? метод вместо !! видел выше.
Это намного более читабельно для других разработчиков.
Примеры :
1
2
3
4
5
6
7
8
$> my_hash[:b]
'some_value'
$> my_hash[:c]
nil
$> my_hash.key?[:b]
false
$> my_hash.key?[:c]
true
Ruby-on-Rails: проверьте, есть ли в хеше ключ
Вы можете использовать .has_key?
также. Я предпочитаю это решение, потому что оно делает намерение намного яснее. Поскольку вы ожидаете логическое значение, лучше начинать метод с is_ или has_/have_.
1
2
3
4
5
6
7
8
$> my_hash[:b]
'some_value'
$> my_hash[:c]
nil
$> my_hash.has_key?[:b]
false
$> my_hash.has_key?[:c]
true
Самый надежный ответ
Что делать, если вы не совсем уверены в проверяемом хэше?
Случай первый: вы не уверены, являются ли ключи символами или нет. Подумайте о хеше, извлеченном из удаленного API.
1
2
$> my_hash.deep_symbolize_keys.try(:key?, :a)
true
Случай второй: вы не уверены, действительно ли это хеш (может быть ноль или неправильный тип).
1
2
$> my_hash.try(:key?, :a)
true
Обратите внимание, что это можно рассматривать как чрезмерную инженерию, в зависимости от контекста.
Заключение
Проверить, имеет ли хэш ключ в Ruby, довольно просто, все, что вам нужно, — это обратить немного внимания, в каком контексте вы пишете эту проверку.
См. также это ТАК вопрос.
2024-02-01 12:56:56
1706980544
#Как #проверить #есть #ли #хеша #ключ #Ruby