与this question非常相似,但在Ruby中。
我有一个嵌套的哈希(下面是一个非文字的例子),我有一个指向我最深的子值的数组:
ab0:
ad1:
ab0:
ad1: {}
ad1:
ab0:
ad1:
ab0: {}
指向最后一个键“ab0”的数组是[1,0,0,0]。我想通过指向hash [1] [0] [0] [0]来使用这个数组来遍历哈希。
我将有希望使用这个来获取有关孩子的路径上使用的每个密钥。我的结果应该是:
keysUsed(hash, [1,0,0,0]) = [hash.keys[1], hash.keys[1].keys[0], hash[1].keys[0].keys[0]]
答案 0 :(得分:0)
以下是您标题中问题的答案以及您提供的链接:
def to_nested_hash(array)
array.reverse.inject { |h, k| { k => h } }
end
hash1 = to_nested_hash([:a, :b, :c, :d])
#=> {:a=>{:b=>{:c=>:d}}}
def path_from_nested_hash(hash, indices)
path = []
indices.inject(hash){ |h, i|
case h
when Hash
path << h.keys[i]
h.values[i] || {}
when Array
path << h[i]
h[i]
else
path << h
end
}
path
end
path_from_nested_hash( hash1.merge(hash2), [0,0,0,0])
# [:a, :b, :c, :d]
path_from_nested_hash( hash1.merge(hash2), [1,0,0,0])
# [:e, :f, :g, :h]
path_from_nested_hash( hash1.merge(hash2), [1,1,0,0])
# [:e, nil, nil, nil]