让我说我有:
a = { b:1 , c: { d:2, e:3 } }
address = [:c, :e]
我可以使用
访问3
a[ address[0] ][ address[1] ]
但这不灵活,我希望能够获取一个任意地址数组并通过它的哈希值。
有一种优雅的方法可以做到这一点还是我需要编写一个递归方法?如果接受数组,RubyDoc's Fetch会很棒。
答案 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