Получить значение хэша с несколькими уровнями - PullRequest
0 голосов
/ 21 марта 2019

Я сомневаюсь, есть ли способ получить значение v без указания, например, [:a][:b][:v]?

{a: {b: {v: 'x'}}}

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Если вы не знаете ключей, но знаете, что у каждого вложенного хэша есть только один ключ:

def dig_values(h)
  if h.is_a? Hash
    dig_values(h[h.keys.first])
  else
    return h
  end
end

dig_values(h) #=> "x"

Это рекурсивный метод (как вы можете видеть в телеон вызывает сам себя и использует следующие методы Ruby: Hash # keys , Object # is_a? и Enumerable # first .

2 голосов
/ 21 марта 2019

Если у вас уже есть ключи, скажите

keys = [:a, :b, :v]

затем вы можете использовать dig(), чтобы получить значение как:

hash = {a: {b: {v: 'x'}}}
hash.dig(*keys) #=> "x"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...