如何将由散列数组构成的树更改为其他结构,如:
我的数据看起来像:
{
"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" => []
# }
# }
# }
# }
此解决方案返回未包装在内部数组中的散列。如果您真的想用数组包装嵌套散列,请将它们映射到
λ
中。