如何将由散列数组构成的树更改为其他结构,如:
我的数据看起来像:

{
  "A": [
         { "A1": [] },
         { "A2": [] },
         {
           "A3": [
                   {
                     "A31": [
                              { "A311": [] },
                              { "A312": [] }
                            ]
                   }
                 ]
         }
       ]
}

变成这样:
{
  "name":     "A",
  "children": [
                { "name": "A1" },
                { "name": "A2" },
                {
                  "name":     "A3",
                  "children": [
                                {
                                  "name":     "A31",
                                  "children": [
                                                { "name": "A311" },
                                                { "name": "A312" }
                                              ]
                                }
                              ]
                }
              ]
}

我试了几件事,但都没能如愿。
这就是我如何进入我的树
def recursive(data)
    return if data.is_a?(String)
    data.each do |d|
        keys = d.keys
        keys.each do |k|
            recursive(d[k])
        end
    end
   return data
end

我尽我所能去关注how to ask以便澄清:
这棵树可以有无限的深度
名字比A1,A2更复杂…

最佳答案

λ = ->(h) { [h[:name], h[:children] ? h[:children].map(&λ).to_h : []] }

[λ.(inp)].to_h
#⇒ {
#  "A" => {
#    "A1" => [],
#    "A2" => [],
#    "A3" => {
#      "A31" => {
#        "A311" => [],
#        "A312" => []
#      }
#    }
#  }
# }

此解决方案返回未包装在内部数组中的散列。如果您真的想用数组包装嵌套散列,请将它们映射到λ中。

10-06 13:47
查看更多