golang 无限极树的结构化返回
从一篇博客上学习到的方式。作用于树状数据处理返回,很巧妙,学习到了,记录下来。
实现思路
1.获取所有数据list
2.遍历所有数据list,转换为map。以唯一ID为key
3.遍历所有数据list,(这里继续用list,是为了保证按照顺序输出)
4.遍历中,取所有的父级ID。定义为一级子集。
5.遍历中,如果存在父级ID。追加到父级的子集中。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ---------处理代码------------- list,total := 查询的全部数据 treeMap := make( map [string]*treeItem, total) for _, v := range list { treeMap[v.FileId] = &treeItem{ FileId: v.FileId, FileName: v.FileName, ParentId: v.ParentId, Children: []*treeItem{}, } } treeData := make([]*treeItem, 0, total) //全部的树状数据 for _, v := range list { if v.ParentId == "" || v.ParentId == "0" { treeData = append(treeData, treeMap[v.FileId]) continue } if vv, ok := treeMap[v.ParentId]; ok { vv.Children = append(vv.Children, treeMap[v.FileId]) } } ---------处理代码------------- type treeItem struct { FileId string `json: "file_id" ` FileName string `json: "file_name" ` ParentId string `json: "parent_id" ` Children []*treeItem `json: "children" ` } |
1 | treeData就是处理后的数据,仅供参考 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2020-05-09 systemd管理golang 服务进程