Home » Как проверить, есть ли у хеша ключ в Ruby

Как проверить, есть ли у хеша ключ в Ruby

В 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

Read more:  Гостья Antiques Roadshow «тряслась» после того, как обнаружила, что бокалу для вина за 50 пенсов на самом деле 300 лет, и он «очень редкий» и имеет ОГРОМНУЮ ценность.

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.