【发布时间】:2021-01-31 14:44:00
【问题描述】:
我很难理解如何简单地对map[string]float64 进行排序。我查看了How to sort a Map[string]int by its values?,它建议使用结构进行排序,但是当sort.Sort func 需要func(i, j int) 而不是func(i, j float64) 时,我不确定如何执行此操作。
例如,这将如何排序?
data := make(map[string]float64)
data["red"] = 1.00
data["green"] = 3.00
data["blue"] = 2.00
我尝试了以下方法,但仅按地图中的string 排序,而不是实际的float64:
data := make(map[string]float64)
data["red"] = 1.00
data["green"] = 3.00
data["blue"] = 2.00
var keys []string
var values []float64
for key, cost := range data {
keys = append(keys, key)
costs = append(costs, cost)
}
sort.Strings(keys)
sort.Float64s(values)
for _, key := range keys {
fmt.Printf("%s %v\n", key, data[key])
}
【问题讨论】:
-
i和j参数是切片的索引,而不是要排序的实际值。请查看sort 包中的示例以了解如何使用它。您可能还需要struct { key string, cost float64 }进行排序。 -
啊,这就是我所缺少的。谢谢马克!