获取具有多个级别的哈希值

时间:2019-03-21 13:43:00

标签: ruby

我很怀疑,有没有办法在不放入v的情况下获得[:a][:b][:v]的值?

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

2 个答案:

答案 0 :(得分:2)

如果已经有钥匙,请说

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

然后,您可以使用dig()将值获取为:

hash = {a: {b: {v: 'x'}}}
hash.dig(*keys) #=> "x"

答案 1 :(得分:2)

如果您不知道键,但是您知道每个嵌套的哈希只有一个键:

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#keysObject#is_a?Enumerable#first