Go语言map排序

一、按照key排序

按照key排序先要取出map中的key放入切片中,将切片排序后再取出value。

import (
	"fmt"
	"sort"
)

func main() {
	m := map[int]string{
		1:   "hello",
		123: "my",
		456: "homepage",
		11:  "gopher",
		34:  "welcome",
		45:  "to",
	}

	var s []int
	// 将key取出并放入s
	for k := range m {
		s = append(s, k)
	}

	// 将s排序
	sort.Ints(s)

	// 取出value
	for _, k := range s {
		fmt.Printf("key = %d, value = %s\n", k, m[k])
	}
}

// key = 1, value = hello
// key = 11, value = gopher
// key = 34, value = welcome
// key = 45, value = to
// key = 123, value = my
// key = 456, value = homepage

二、按照value排序

按照value排序也是先要取出map中的key放入切片中,将切片按照value排序(用到sort.Slice()函数)后再取出value。

import (
	"fmt"
	"sort"
)

func main() {
	m := map[int]string{
		1: "a",
		2: "c",
		3: "e",
		4: "b",
		5: "d",
		6: "f",
	}

	keys := make([]int, 0, len(m))
	// 取出key
	for k := range m {
		keys = append(keys, k)
	}

	// 将key按照value进行排序
	sort.Slice(keys, func(i, j int) bool {
		return m[keys[i]] < m[keys[j]]
	})

	for _, k := range keys {
		fmt.Printf("key = %d, value = %s\n", k, m[k])
	}
}


// key = 1, value = a
// key = 4, value = b
// key = 2, value = c
// key = 5, value = d
// key = 3, value = e
// key = 6, value = f

记得以前刷题遇到过一个题目:计算给定字符串中字符出现的次数并按照降序排序。

根据上例,我们可以很容易写出方案:

import (
	"fmt"
	"sort"
)

func main() {
	str := "goMapSortCase"

	m := make(map[string]int)
	s := make([]string, 0, len(str))

	for _, v := range str {
		m[string(v)]++
	}

	for k := range m {
		s = append(s, k)
	}
	sort.Slice(s, func(i, j int) bool {
		return m[s[i]] > m[s[j]]
	})

	for _, key := range s {
		fmt.Printf("%s %d;", key, m[key])
	}
}

// o 2;a 2;p 1;r 1;s 1;e 1;g 1;M 1;S 1;t 1;C 1;

全部评论

相关推荐

11-11 14:21
西京学院 C++
Java抽象练习生:教育背景放最前面,不要耍小聪明
点赞 评论 收藏
分享
11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
有没有经济学家能告诉我,三年后中国的就业市场会不会好转?我在校招中拿到了一份9k+的offer,还是行业的龙头企业,心里其实不想再考研了。但又总是担心,万一读研后薪资更高,我会不会后悔呢?
Fyhyuky:三年后肯定不会啊,只会比现在更烂,你自己看看现在有没有什么增长点,电车都是国家补贴兜底才发展出来的,已经比较违背市场自然规律了,互联网更不用说了,国家强力打压,传统制造业转型失败,现在苟延残喘中
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务