web服务返回的哈希包含未知数量的嵌套哈希,其中一些包含数组,而数组又包含未知数量的嵌套哈希.
有些键不是唯一的,即存在于多个嵌套哈希中.
然而,我真正关心的所有 keys 都是独一无二的.
有没有什么方法可以给顶级散列提供一个密钥,即使密钥-值对被深埋在这个泥沼中,也能得到它的值?
(该web服务是Amazon产品广告API,根据每个产品类别中允许的结果数量和搜索类型,它给出的结果 struct 略有不同.)
web服务返回的哈希包含未知数量的嵌套哈希,其中一些包含数组,而数组又包含未知数量的嵌套哈希.
有些键不是唯一的,即存在于多个嵌套哈希中.
然而,我真正关心的所有 keys 都是独一无二的.
有没有什么方法可以给顶级散列提供一个密钥,即使密钥-值对被深埋在这个泥沼中,也能得到它的值?
(该web服务是Amazon产品广告API,根据每个产品类别中允许的结果数量和搜索类型,它给出的结果 struct 略有不同.)
下面是一个简单的递归解决方案:
def nested_hash_value(obj,key)
if obj.respond_to?(:key?) && obj.key?(key)
obj[key]
elsif obj.respond_to?(:each)
r = nil
obj.find{ |*a| r=nested_hash_value(a.last,key) }
r
end
end
h = { foo:[1,2,[3,4],{a:{bar:42}}] }
p nested_hash_value(h,:bar)
#=> 42