[ { Id: 1, ParentId: 0, ParentIds: "1,", Name: "test1", }, { Id: 2, ParentId: 1, ParentIds: "1,2,", Name: "", }, { Id: 3, ParentId: 2, ParentIds: "1,2,3,", Name: "test3", }, { Id: 7, ParentId: 3, ParentIds: "1,2,3,7,", Name: "test3", }, ] list为以上的数据,怎么在goframe框架里实现根据ParentId将list数据转化为树型数据,如下结构 [ { Id: 1, ParentId: 0, ParentIds: "1,", Name: "test1", Chaild: [ { Id: 2, ParentId: 1, ParentIds: "1,2,", Name: "", Chaild: [ { Id: 3, ParentId: 2, ParentIds: "1,2,3,", Name: "test3", Chaild: [ { Id: 7, ParentId: 3, ParentIds: "1,2,3,7,", Name: "test3", }, ] }, ] }, ] }, ]
时间: 2024-03-11 07:49:56 浏览: 9
在goFrame框架中,可以使用递归实现树形结构的转换。具体实现如下:
1. 定义一个结构体表示树节点:
```
type TreeNode struct {
Id int `json:"id"`
ParentId int `json:"parentId"`
ParentIds string `json:"parentIds"`
Name string `json:"name"`
Children []*TreeNode `json:"children"`
}
```
2. 定义一个转换函数,将list转换为树形结构:
```
func convertToTreeList(list []*TreeNode) []*TreeNode {
// 定义一个map,用来存储以id为key的节点
nodeMap := make(map[int]*TreeNode)
// 遍历list,将每个节点添加到nodeMap中
for _, node := range list {
nodeMap[node.Id] = node
}
// 定义一个返回结果的数组
var result []*TreeNode
// 遍历list,将每个节点挂到其父节点下面
for _, node := range list {
parentId := node.ParentId
parent, ok := nodeMap[parentId]
if ok {
// 如果父节点存在,则将当前节点添加到父节点的children中
parent.Children = append(parent.Children, node)
} else {
// 如果不存在,则说明当前节点是根节点,将其添加到result中
result = append(result, node)
}
}
return result
}
```
3. 调用转换函数,将list转换为树形结构:
```
list := []*TreeNode{
{Id: 1, ParentId: 0, ParentIds: "1,", Name: "test1"},
{Id: 2, ParentId: 1, ParentIds: "1,2,", Name: ""},
{Id: 3, ParentId: 2, ParentIds: "1,2,3,", Name: "test3"},
{Id: 7, ParentId: 3, ParentIds: "1,2,3,7,", Name: "test3"},
}
treeList := convertToTreeList(list)
```