Den*_*nis 1 ruby arrays hash ruby-on-rails
我正在尝试解析一个大型XML文件.我正在使用Saxerator.
我的哈希有一种树:
obj= {
"id"=>'1', "groups" =>{
"group" =>[
{"id"=>"2", "groups"=>{}},
{"id"=>"3", "groups"=>{}},
{"id"=>"4", "groups"=>{
"group"=>[
{"id"=>"5", "groups"=>{}},
{"id"=>"6", "groups"=>{}},
]}}
]}}
Run Code Online (Sandbox Code Playgroud)
我事先并不知道树的深度.我有一个问题.我不知道如何在数组中转换它.结果应该是这样的:
[{"id"=> "1", "parent_id"=> "0"},
{"id"=> "2", "parent_id"=> "1"},
{"id"=> "3", "parent_id"=> "1"},
{"id"=> "4", "parent_id"=> "1"},
{"id"=> "5", "parent_id"=> "4"},
{"id"=> "6", "parent_id"=> "4"}]
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
您正在寻找一个非常简单的递归函数,它可以对树进行线性化,但也可以跟踪父级:
def tree_to_a(tree, p = 0)
id = tree["id"]
(tree["groups"]["group"] || [])
.flat_map { |sub| tree_to_a(sub, id) }
.unshift("id" => id, "parent_id" => p)
end
Run Code Online (Sandbox Code Playgroud)