我具有以下格式的结构
type Node struct {
Id string
Children []*Node
}
我有以下输入内容
var nestedSlice = [][]string{
{"60566", "605", "6056"},
{"60566", "605", "6061"},
{"60566", "605", "6065"},
{"60653", "606", "6109"},
{"60566", "603", "6065"},
}
package main
import (
//"fmt"
"github.com/davecgh/go-spew/spew"
)
type Node struct {
Id string
Type string
Children []*Node
}
func createNode(values []string, node *Node) *Node {
}
func insert(values []string, nodes []*Node) []*Node {
if len(nodes) == 0 {
rootNode := createNode(values, &Node{})
nodes = append(nodes, rootNode)
return nodes
} else {
for _, node := range nodes {
if node.Id == values[0] {
return insert(values[1:], node.Children)
}
}
anotherRoot := &Node{
Id: values[0],
}
nodes = append(nodes, anotherRoot)
}
return nodes
}
func main() {
nodes := make([]*Node, 0, 6)
var nestedSlice = [][]string{
{"60566", "605", "6056"},
{"60566", "605", "6061"},
{"60566", "605", "6065"},
{"60653", "606", "6109"},
{"60566", "603", "6065"},
}
for _, value := range nestedSlice {
nodes = insert(value, nodes)
}
spew.Dump(nodes)
}
我在使用createNode函数时遇到麻烦。我不确定如何获取切片并使用递归创建
我希望最终能够拥有以下结构
[{
Id: 60566,
Children: [{
Id: 605,
Children: [{
Id: 6056
}, {
Id: 6061
}, {
Id: 6065
}]
}, {
Id: 603,
Children: [{
Id: 6065
}]
}]
}, {
Id: 60653
Children: [{
Id: 606,
Children: [{
Id: 6109
}]
}]
}]
答案 0 :(得分:0)
这是我的方法,我将创建Node,然后添加一个单独的方法来添加子代。
func createNode(id string) *Node{
return &Node{
id: id,
children: make([]*Node, 0)
}
}
现在添加节点。
func(n *Node) addChildren(nodes []*Node){
for _, node := range nodes{
n.children.append(node)
}
}
但是如果您愿意,可以将两者结合起来。
func createNode(id string, nodes []*Node) *Node{
p= Node{
id: id,
children: make([]*Node, 0)
}
for _, node := range nodes{
p.children.append(node)
}
return &p
}