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;

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 11:35
程序员小白条:话太多,没实力和学历,差不多回答回答就行了,身份地位不一样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务