自2天以来,我一直处于困境中,因为我不坚定地使用指针和递归。我有一系列类似结构的路径,可以这样说:
s:=[]string {
"a/b/c",
"a/b/g",
"a/d",
}
Run Code Online (Sandbox Code Playgroud)
使用这样的数据结构:
type Node struct {
Name string `json:"name"`
Children []Node `json:"children"`
}
Run Code Online (Sandbox Code Playgroud)
我想结束这样的事情:
{
"name": "a",
"children": [
{
"name": "b",
"children": [
{
"name": "c",
"children": []
},
{
"name": "g",
"children": []
}
]
},
{
"name": "d",
"children": []
}
]
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用递归来构建它,这种方法很好,但仅适用于一个字符串(例如“ a / b / c”),一旦尝试实现应添加缺失节点(“ a / b / g“)固定到一棵树上。
我有类似的东西:
func appendChild(root Node, children []string) Node {
if len(children) == 1 {
return Node{children[0], nil}
} else {
t := root
t.Name=children[0]
t.Children = append(t.Children, appendChild(root, children[1:]))
return t
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以指出我一个有效的解决方案吗?
https://play.golang.org/p/9pER5cwChF
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
}
Run Code Online (Sandbox Code Playgroud)
示例输出(请注意,我omitempty在 Children 字段上使用,因为我不喜欢nullJSON 中的条目):
[{
"name": "a",
"children": [{
"name": "b",
"children": [{
"name": "c"
}, {
"name": "g"
}]
}, {
"name": "d"
}]
}]
Run Code Online (Sandbox Code Playgroud)
与您的版本的显着差异:
a),但情况可能并非如此。在您的版本中处理该问题的唯一方法是在根处有一个“假”节点。| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |