将路径结构转换为树
从路径字符串集合开发嵌套数据结构可能会带来挑战,特别是在处理指针和递归。让我们研究一个从路径结构数组创建层次树的解决方案。
考虑以下示例:
s:=[]string { "a/b/c", "a/b/g", "a/d" }
我们的目标是构造一个类似于以下 JSON 结构的树:
{ "name": "a", "children": [ { "name": "b", "children": [ { "name": "c", "children": [] }, { "name": "g", "children": [] } ] }, { "name": "d", "children": [] } ] }
为了实现这一点,我们实现了一个名为 AddToTree 的递归函数,它采用现有的树和路径段列表。
func AddToTree(root []Node, names []string) []Node { if len(names) > 0 { var i int for i = 0; i < len(root); i++ { if root[i].Name == names[0] { //already in tree break } } if i == len(root) { root = append(root, Node{Name: names[0]}) } root[i].Children = AddToTree(root[i].Children, names[1:]) } return root }
此函数遍历现有的树以确定是否指定的节点已经存在。如果是,它将继续到路径的下一段。否则,它会创建一个具有指定名称的新节点并将其附加到现有树中。
Example output (note that I used omitempty on the children field, because I don't like null entries in my JSONs): [{ "name": "a", "children": [{ "name": "b", "children": [{ "name": "c" }, { "name": "g" }] }, { "name": "d" }] }]
我们的解决方案在以下关键方面与原始方法不同:
以上是如何从路径字符串列表构建层次树结构?的详细内容。更多信息请关注PHP中文网其他相关文章!