ruby使用地址数组访问subhash链

时间:2014-06-05 14:56:05

标签: ruby hash

让我说我有:

a = { b:1 , c: { d:2, e:3 } }
address = [:c, :e]

可以使用

访问3
a[ address[0] ][ address[1] ]

但这不灵活,我希望能够获取一个任意地址数组并通过它的哈希值。

有一种优雅的方法可以做到这一点还是我需要编写一个递归方法?如果接受数组,RubyDoc's Fetch会很棒。

2 个答案:

答案 0 :(得分:5)

a = { b:1 , c: { d:2, e:3 } }
address = [:c, :e]
address.inject(a, :[])
# => 3

答案 1 :(得分:1)

使用递归的方法:

def probe(h, address)
  address.size==1 ? h[address.first] : probe(h[address.first], address[1..-1])
end

h = { b:1 , c: { d:2, e:3 } }
a = [:c, :e]
probe(h,a) #=> 3

或者,如果您愿意:

def probe(h, address)
  begin
    probe(h[address.first], address[1..-1])
  rescue TypeError
    return h[address.first]
  end
end