最近工作中遇到了这样的一个场景,需要处理一个无限极分类的问题,对于数据结构的定义首先想到了,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])
}
}

  

go语言学习--处理map的无序输出的更多相关文章

  1. C语言学习007:重定向标准输入和输出

    先来完成一个将输入数据转换成json格式输出的小任务 #include <stdio.h> int main(){ float latitude; float longtitude; ]; ...

  2. C语言学习008:标准错误

    在上一节中的数据文件中(C语言学习007:重定向标准输入和输出),如果文件中的数据包含非法数据,如何让程序显示一条错误的提示消息呢?就需要用到标准错误 #include <stdio.h> ...

  3. GO学习-(11) Go语言基础之map

    Go语言基础之map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现. map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能 ...

  4. Go语言学习笔记十三: Map集合

    Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...

  5. go语言学习笔记

    Go语言学习基本类型Bool 取值范围:true,false (不可以用数字代替)Int/uint 根据平台可能为32或64位int8/uint8 长度:1字节 取值范围-128~127/0~255b ...

  6. 跨语言学习的基本思路及python的基础学习

    笔者是C#出身,大学四年主修C#,工作三年也是C#语言开发.但在学校里其他的语言也有相应的课程,eg:Java,Php,C++都学过,当然只是学了皮毛(大学嘛,你懂得),严格来说未必入门,但这些语言的 ...

  7. Go语言基础之map

    Go语言基础之map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现. map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能 ...

  8. go语言学习(基本数据类型)

    值类型: int/uint :根据系统确定是32还是64位.此外还有int8/uint8.int16/uint16.int32/uint32.int64/uint64 byte:字节型,相当于uint ...

  9. Go语言学习笔记(1)——顺序编程

    Go语言学习笔记这一堆主要是<Go语言编程>(人民邮电出版社)的读书笔记.中间会穿插一些零碎的点,比如源码学习之类的.大概就是这样吧. 1. 顺序编程 1.1 变量 变量的声明: var ...

随机推荐

  1. CentOS 每个版本的区别

    当我们下载CentOS 7 时会发现有几个版本可以选择,如下: 1.CentOS-7-DVD版本:DVD是标准安装盘,一般下载这个就可以了. 2.CentOS-7-NetInstall版本:网络安装镜 ...

  2. Mac配置系统环境变量

    最近在配置flutter的环境变量,使用: export PATH=$PATH:`pwd`/flutter/bin 然后一段时间之后发现环境变量莫名其妙的就消失了,这里有一个大坑! !!!!Mac 系 ...

  3. C++实现 电子邮件客户端程序(简易版)

    #Windows操作系统下 用命令行工具实现发送邮件(编程前工作) 步骤: 1.telnet连接服务器(以用QQ邮箱向网易邮箱发送邮件为例,端口号25) 2.返回220 说明连接成功 3.ehlo发送 ...

  4. angular2在ts中使用transform转换时间格式

    摘要:在angular1中我们可以在控制器中像下面那样使用filter: $filter('date')(myDate, 'yyyy-MM-dd'); 但是如何在angular2中在ts中使用自定义p ...

  5. 《TypeScript 中文入门教程》

    转载:<TypeScript 中文入门教程> 17.注解 (2015-12-03 11:36) 转载:<TypeScript 中文入门教程> 16.Symbols (2015- ...

  6. Apache Flume 学习笔记

    # 从http://flume.apache.org/download.html 下载flume ############################################# # 概述: ...

  7. SVN 的搭建及使用(一)下载和搭建SVN服务器

    (本文是从博客园上的文章改编而来,其中有些关于版本问题的截图是直接引用原文的,与当前版本有可能不同) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和 ...

  8. .NET并行计算和并发4-Thread-Relative Static Fields and Data Slots

    Thread Local Storage: Thread-Relative Static Fields and Data Slots 文章摘自msdn library官方文档 可以使用托管线程本地存储 ...

  9. python day19--面向对象,接口,封装

    #1.接口类,对象类.规范类中方法的统一. # 第一版:三个类,每个类中有相同的方法 # class Alipay: # def __init__(self,money): # self.money= ...

  10. 剑指Offer 40. 数组中只出现一次的数字 (数组)

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 题目地址 https://www.nowcoder.com/practice/e02fdb54 ...