我正在尝试按照针对键存储的值的降序遍历 map 。我试过:
func frequencySort(s string) string {
var frequency map[string]int
chararray := strings.Split(s , "")
var a []int
var arranged map[int]string
for k , v := range frequency {
arranged[v] = k
}
for k := range arranged {
a = append(a , k)
}
sort.Sort(sort.Reverse(sort.IntSlice{a}))
}
假设 map 结构是:
"a" : 9
"b" : 7
"c" : 19
"d" : 11
我正在尝试遍历它,使得输出为:
"c" : 19
"d" : 11
"a" : 9
"b" : 7
最佳答案
只要您在 frequency
中有多个具有相同值的键,例如 "a":7
,您在示例中使用的两种映射方法就会失效和 "b":7
,那么您将丢失 arranged
中的数据,因为键必须是唯一的。
为避免这种情况,您可以创建一个辅助类型来临时保存 map 的内容,仅用于排序目的。像这样:
package main
import (
"fmt"
"sort"
)
var m = map[string]int{
"a": 9,
"b": 7,
"c": 19,
"d": 11,
}
type entry struct {
val int
key string
}
type entries []entry
func (s entries) Len() int { return len(s) }
func (s entries) Less(i, j int) bool { return s[i].val < s[j].val }
func (s entries) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func main() {
var es entries
for k, v := range m {
es = append(es, entry{val: v, key: k})
}
sort.Sort(sort.Reverse(es))
for _, e := range es {
fmt.Printf("%q : %d\n", e.key, e.val)
}
}
关于go - 按值的降序遍历 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47121635/