似乎是一个基本问题,但找不到简单的答案。我有一片:[]string{"dog", "cat", "bird"}通过查找地图中的排序值对其进行排序的最佳方法是什么:map[string]int{"dog": 2, "cat":3, "bird": 1}这样切片的顺序如下:[]string{"bird", "dog", "cat"}
1 回答
慕斯709654
TA贡献1840条经验 获得超5个赞
sort.Interface为存储数据和权重的类型实现接口:
import "sort"
type WeightedStringSlice struct {
Strings []string
Weights map[string]int
}
func (s *WeightedStringSlice) Len() int {
return len(s.Strings)
}
func (s *WeightedStringSlice) Less(i, j int) bool {
return s.Weights[s.Strings[i]] < s.Weights[s.Strings[j]]
}
func (s *WeightedStringSlice) Swap(i, j int) {
s.Strings[i], s.Strings[j] = s.Strings[j], s.Strings[i]
}
然后调用sort.Sort它:
data := WeightedStringSlice{
Strings: []string{"dog", "cat", "bird"},
Weights: map[string]int{"dog": 2, "cat": 3, "bird": 1},
}
sort.Sort(&data)
fmt.Printf("%v\n", data.Strings)
Live Demo
- 1 回答
- 0 关注
- 229 浏览
添加回答
举报
0/150
提交
取消