首页 >后端开发 >Golang >如何按映射值的降序对映射进行排序?

如何按映射值的降序对映射进行排序?

Barbara Streisand
Barbara Streisand原创
2024-12-12 11:59:10226浏览

How Do I Sort a Map by Its Values in Descending Order?

如何按值对映射进行排序

在处理目标是对键值进行排序的映射时会出现此问题基于按降序排列的值的对。例如,给定一个像这样的地图:

map[string]int{
    "hello": 10,
    "foo": 20,
    "bar": 20,
}

人们可能想按如下方式打印排序对:

foo, 20
bar, 20
hello, 10

解决方案

此问题的解决方案是通过提供必要的 len、less 和 swap 函数来实现排序接口。下面是一个示例实现:

func rankByWordCount(wordFrequencies map[string]int) PairList {
    pl := make(PairList, len(wordFrequencies))
    i := 0
    for k, v := range wordFrequencies {
        pl[i] = Pair{k, v}
        i++
    }
    sort.Sort(sort.Reverse(pl))
    return pl
}

type Pair struct {
    Key   string
    Value int
}

type PairList []Pair

func (p PairList) Len() int           { return len(p) }
func (p PairList) Less(i, j int) bool { return p[i].Value < p[j].Value }
func (p PairList) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }

要使用此函数,请将映射作为参数传递给rankByWordCount,这将返回键值对的排序列表。然后,您可以迭代列表以打印排序结果。

以上是如何按映射值的降序对映射进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn