Ruby:连接哈希键

3

我有以下哈希值:

{
  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"
}

1
可能是重复的问题:将嵌套的哈希转换为平面哈希 - sawa
@sawa 你是对的,谢谢。 - ole
1个回答

5

这里是一个修改过的解决方案:

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接