Ruby - получение значения хэша - PullRequest
27 голосов
/ 30 декабря 2011

У меня есть хеш, как

{:key1 => "value1", :key2 => "value2"}

И у меня есть переменная k, которая будет иметь значение 'key1' или 'key2'.

Я хочу получить значение k в переменную v.

Есть ли способ достичь этого без использования if или case?Однолинейное решение является предпочтительным.Пожалуйста, помогите.

1 Ответ

72 голосов
/ 30 декабря 2011

Преобразуйте ключ из строки в символ и выполните поиск в хэше.

hash = {:key1 => "value1", :key2 => "value2"}
k = 'key1'

hash[k.to_sym] # or iow, hash[:key1], which will return "value1"

Rails использует этот класс с именем HashWithIndifferentAccess, который оказывается очень полезнымв таких случаях.Я знаю, что вы пометили свой вопрос только с помощью Ruby, но вы могли бы украсть реализацию этого класса из исходного кода Rails, чтобы избежать преобразования строки в символ и преобразования символов в строку по всей вашей кодовой базе.Это делает значение доступным, используя символ или строку в качестве ключа.

hash = HashWithIndifferentAccess.new({:key1 => "value1", :key2 => "value2"})
hash[:key1]  # "value1"
hash['key1'] # "value1"
...