gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/treex/treex-list.go (about) 1 package treex 2 3 import "gitee.com/zhongguo168a/gocodes/datax" 4 5 type TreeListItem struct { 6 /** 7 * 编号 8 */ 9 Id string 10 /** 11 * 父编号 12 */ 13 Parent string 14 15 /** 16 * 自定义数据 17 */ 18 Data interface{} 19 } 20 21 func NewByList(arr []*TreeListItem) *TreeRoot { 22 nodes := datax.M{ 23 "/": nil, 24 } 25 var root *TreeRoot 26 for _, val := range arr { 27 node := &TreeNode{Id: val.Id} 28 nodes[val.Id] = node 29 node.Data = val.Data 30 } 31 root = NewTreeRoot() 32 if nodes["/"] == nil { 33 nodes["/"] = root 34 } else { 35 a := nodes["/"].(*TreeNode) 36 root.TreeNode = *a 37 nodes["/"] = root 38 } 39 for _, val := range arr { 40 node := nodes[val.Id] 41 iparent, hasParent := nodes[val.Parent] 42 if hasParent { 43 parent := iparent.(ITreeNode) 44 parent.AddChild(node.(*TreeNode)) 45 } 46 } 47 return root 48 }