我有以下哈希:
{
a: {
b: {
c1: "c1 value",
c2: "c2 value",
c3: {
d: "d value
}
}
}
如何将他转换为下一个结果:
{
"a.b.c1" => "c1 value",
"a.b.c2" => "c2 value",
"a.b.c3.d" => "d value"
}
答案 0 :(得分:5)
以下是modified解决方案:
h = {
a: {
b: {
c1: "c1 value",
c2: "c2 value",
c3: {
d: "d value"
}
}
}
}
def flatten_hash(h)
return { "" => h } unless h.is_a?(Hash)
Hash[h.map { |a,v1| flatten_hash(v1).map { |b,v2| [[a,b].map(&:to_s).delete_if(&:empty?).join('.'), v2] } }.flatten(1)]
end
p flatten_hash(h)