随笔 - 308  文章 - 0  评论 - 84  阅读 - 75万

go语言学习--处理map的无序输出

最近工作中遇到了这样的一个场景,需要处理一个无限极分类的问题,对于数据结构的定义首先想到了,map,map[int]map[int]struct。通过两层map的定义归类parent_id和id的关系,然后有个递归进行数据的绑定处理。想想就开心,map确实好用,虽然不是并发安全,但是在查询速度和检查值存在方面确实有优势,然后就开心的写了起来,但是想起来map的输出是无序的。然后就想办法去处理数据的输出。刚开始,思路错了,老想着在数据的绑定层,就处理好,数据的顺序,于是就想着用切片map,map切片。。。来处理,越想越复杂,数据结构越想越复杂。忽然想到,为什么不把map的key排序,然后就行输出呢,问题一下子解决了。

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
32
33
// buildData 数据的资源组装
func (myL *BusinessRelationLogic) buildData(list []models.BusinessRelationOther) map[int]map[int]models.BusinessRelationOther {
    var data map[int]map[int]models.BusinessRelationOther = make(map[int]map[int]models.BusinessRelationOther)
    for _, v := range list {
        id := v.Id
        fid := v.ParentId
        if _, ok := data[fid]; !ok {
            data[fid] = make(map[int]models.BusinessRelationOther)
        }
        data[fid][int(id)] = v
    }
    return data
}
 
// makeTreeCore 图形化
func (myL *BusinessRelationLogic) makeTreeCore(index int, data map[int]map[int]models.BusinessRelationOther) []models.BusinessRelationOther {
    tmp := make([]models.BusinessRelationOther, 0)
    var keys []int
 
    for k, _ := range data[index] {
        keys = append(keys, k)
    }
    sort.Ints(keys) //排序切片key
    res := models.BusinessRelationOther{}
    for _, id := range keys {
        utils.ChangeStruct2OtherStruct(data[index][id], &res)
        if data[id] != nil {
            res.List = myL.makeTreeCore(id, data)
        }
        tmp = append(tmp, res)
    }
    return tmp
}

  问题解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main
 
import (
    "fmt"
    "sort"
)
 
func main() {
   a:= map[string]string{"1":"a","2":"b","3":"c","4":"d"}
   var keys [] string
   for k := range a{
       keys = append(keys, k)
   }
   sort.Strings(keys)//排序切片key
   fmt.Println(keys,len(keys))
   for _,val := range keys{   //循环key取值
       fmt.Println(a[val])
   }
}

  

 

posted on   ZhanLi  阅读(645)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示