Go map切片及map排序

    技术2022-07-11  107

    map切片

    基本介绍 切片的数据类型如果是 map,则我们称为 slice of map,map 切片,这样使用则 map 个数就可以动态变化了。案例演示 要求:使用一个 map 来记录 monster 的信息 name 和 age, 也就是说一个 monster 对应一个 map,并且妖怪的个数可以动态的增加=>map 切片 //1. 声明一个map切片 var monsters []map[string]string monsters = make([]map[string]string, 2) //准备放入两个妖怪 //2. 增加第一个妖怪的信息 if monsters[0] == nil { monsters[0] = make(map[string]string, 2) monsters[0]["name"] = "牛魔王" monsters[0]["age"] = "500" } if monsters[1] == nil { monsters[1] = make(map[string]string, 2) monsters[1]["name"] = "玉兔精" monsters[1]["age"] = "400" } // 下面这个写法越界。 // if monsters[2] == nil { // monsters[2] = make(map[string]string, 2) // monsters[2]["name"] = "狐狸精" // monsters[2]["age"] = "300" // } //这里我们需要使用到切片的append函数,可以动态的增加monster //1. 先定义个monster信息 newMonster := map[string]string{ "name" : "黄鼠狼", "age" : "200", } monsters = append(monsters, newMonster) fmt.Println(monsters) 输出结果:


    map排序

    golang 中没有一个专门的方法针对 map 的 key 进行排序golang 中的 map 默认是无序的,注意也不是按照添加的顺序存放的,你每次遍历,得到的输出可能不一样. golang 中 map 的排序,是先将 key 进行排序,然后根据 key 值遍历输出即可 案例演示 map1 := make(map[int]int, 10) map1[10] = 100 map1[1] = 13 map1[4] = 56 map1[8] = 90 fmt.Println(map1) 输出结果:


    如果按照map的key的顺序进行排序输出 先将map的key 放入到 切片 对切片排序 遍历切片,然后按照key来输出map的值 var keys []int for k, _ := range map1 { keys = append(keys, k) } //排序 sort.Ints(keys) fmt.Println(keys) for _, k := range keys{ fmt.Printf("map1[%v]=%v \n", k, map1[k]) }

    输出结果:

    Processed: 0.012, SQL: 9