Двусторонний поиск идентификатора против имени ruby - PullRequest
3 голосов
/ 23 октября 2019

У меня есть хеш, в котором id - это ключ, а name - это значение. Оба id and value are unique.

Примерно так:

h[1] = "ABC"
h[3] = "DEF"

Итак, если мне дают ключ 1, я легко могу вернуть значение "ABC".

Мне нужно сделатьreverse lookup, а это означает, что если мне присвоено значение "DEF", я должен вернуть 3.

Кроме того, вместо одного значения или одного ключа для поиска,
Iвместо этого может быть предоставлен массив значений или массив ключей.

Должен ли я реализовать два хэша, по одному для каждого, или есть какой-нибудь другой способ в рубине или рельсах для достижения этого?

Редактировать: Этот вопрос не связан с поиском ключа по значению в хэше. Это связано с выполнением двустороннего поиска не за O (n) времени с лучшим методом, кроме создания двух отдельных хешей.

Ответы [ 2 ]

3 голосов
/ 23 октября 2019

Вы можете использовать Hash # инвертировать , как показано ниже,

reversed_h = h.invert

reversed_h['DEF']
# => 3
3 голосов
/ 23 октября 2019

Вы можете получить свой ключ следующим образом: hash.key(value) => key Ключ Hash #

h = { 1 => 'ABC', 3 => 'DEF' }
puts h.key('DEF')
#=> 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...