我正在尝试转换为以下数组数组
[
"master_type", # [0]
[
"type_1", # [1][0]
[
"type_2", # [1][1][0]
[
"type_3" # [1][1][1][0]
]
],
[
"type_3" # [1][2][0]
]
],
[
"type_4", # [2][0]
[
"type_2" # [2][1][0]
]
],
[
"type_2", # [3][0]
"type_3" # [3][1]
],
"type_3" # [3][1]
]
类似
[
["master_type", "type_1", "type_2", "type_3"],
["master_type", "type_1", "type_3"],
["master_type", "type_4", "type_2"],
["master_type", "type_2", "type_3"],
["master_type", "type_3"]
]
最后,我想阅读这个树,并在有第一个元素时收集所有第一个元素,然后在再次执行之前将其删除,直到我的第一个数组为空。
我无法修复它。你有什么想法 ?
重要的是要注意这个例子是字符串,但我会用更复杂的对象来做
提前谢谢。
答案 0 :(得分:1)
这个实现是递归的,但我怀疑它会溢出。如果你的树很深,你可能想要迭代它。
def flatten_tree(tree)
parent, *subtree = tree
return [[parent]] if subtree.empty?
subtree.flat_map do |element|
flatten_tree(element).each { |children| children.unshift(parent) }
end
end
答案根据sawa的评论进行了更新。