在 ruby 中的嵌套哈希中构建边缘键的路径
Build paths of edge keys in nested hashes in ruby
我有一个多层次的嵌套散列,我想从根中获取每个边键的所有可能路径作为点符号字符串。例如
{a: {m: {b: 2}, c: {d: {e: nil}}}}
我想生成一组如下所示的元素
['a.m.b', 'a.c.d.e']
def recurse(h)
h.flat_map do |k,v|
if v.is_a?(Hash)
recurse(v).map { |str| "%s.%s" % [k.to_s, str] }
else
k.to_s
end
end
end
h = {a: {m: {b: 2, c:1}, d: {e: {f: nil}, g: 3}}}
recurse(h)
#=> ["a.m.b", "a.m.c", "a.d.e.f", "a.d.g"]
h = {a: {m: {b: 2, c:1}, d: 5 }, e: {f: {g: nil}, h: 3}}
recurse(h)
#=> ["a.m.b", "a.m.c", "a.d", "e.f.g", "e.h"]
我有一个多层次的嵌套散列,我想从根中获取每个边键的所有可能路径作为点符号字符串。例如
{a: {m: {b: 2}, c: {d: {e: nil}}}}
我想生成一组如下所示的元素
['a.m.b', 'a.c.d.e']
def recurse(h)
h.flat_map do |k,v|
if v.is_a?(Hash)
recurse(v).map { |str| "%s.%s" % [k.to_s, str] }
else
k.to_s
end
end
end
h = {a: {m: {b: 2, c:1}, d: {e: {f: nil}, g: 3}}}
recurse(h)
#=> ["a.m.b", "a.m.c", "a.d.e.f", "a.d.g"]
h = {a: {m: {b: 2, c:1}, d: 5 }, e: {f: {g: nil}, h: 3}}
recurse(h)
#=> ["a.m.b", "a.m.c", "a.d", "e.f.g", "e.h"]