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

// 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
}

  问题解决

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])
}
}

  

最新文章

  1. https 安全验证问题
  2. 保护WIFI无线网络的安全
  3. UIImageView 点击放大缩小
  4. 使用CocoaPods管理依赖库
  5. hdu 4099 Revenge of Fibonacci 字典树+大数
  6. 解读30个提高Web程序执行效率的好经验
  7. Disqus – About Disqus
  8. 在linux系统中跟踪高IO等待
  9. zoj3204 Connect them 最小生成树
  10. 【Django】Python web开发:几个模板系统的性能对比(转)
  11. ASP.NET前台html页面对table数据的编辑删除
  12. php的mysql语句里变量加不加单引号问题
  13. varnish与squid缓存效率对比实例
  14. Python打开新世界的大门-入门篇1
  15. 使用img2html把图片转为网页
  16. 百度编辑器 ueditor 会屏蔽过滤 body html head DOCTYPE ... 的解决办法
  17. 网站favicon图标的显示问题
  18. elasticsearch-dump 迁移es数据 (elasticdump)
  19. xml获取配置DataTable
  20. Easyui 中 Tabsr的常用方法

热门文章

  1. JS碰撞检测
  2. vue中父组件给子组件传值,子组件给父组件传值
  3. java输入最大10位数,倒数输出(很鸡肋)
  4. Python *Mix_w7
  5. webdriver +浏览器驱动
  6. 团队项目(MVP------新能源汽车无线充电管理网站)(个人任务1)
  7. PHP涉及的所有英文单词
  8. Js/Bind()的认识
  9. 学c++需要先学c语言吗?
  10. Android开发中Activity状态的保存与恢复