如何按值对映射进行排序
在处理目标是对键值进行排序的映射时会出现此问题基于按降序排列的值的对。例如,给定一个像这样的地图:
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中文网其他相关文章!