如何按地图的值对切片进行排序

似乎是一个基本问题,但找不到简单的答案。

我有一片:

[]string{"dog", "cat", "bird"}

通过查找地图中的排序值对其进行排序的最佳方法是什么:

map[string]int{"dog": 2, "cat":3, "bird": 1}

这样切片的顺序如下:

[]string{"bird", "dog", "cat"}


DIEA
浏览 230回答 1
1回答

慕斯709654

&nbsp; &nbsp; sort.Interface为存储数据和权重的类型实现接口:import "sort"type WeightedStringSlice struct {&nbsp; &nbsp; Strings []string&nbsp; &nbsp; Weights map[string]int}func (s *WeightedStringSlice) Len() int {&nbsp; &nbsp; return len(s.Strings)}func (s *WeightedStringSlice) Less(i, j int) bool {&nbsp; &nbsp; return s.Weights[s.Strings[i]] < s.Weights[s.Strings[j]]}func (s *WeightedStringSlice) Swap(i, j int) {&nbsp; &nbsp; s.Strings[i], s.Strings[j] = s.Strings[j], s.Strings[i]}然后调用sort.Sort它:data := WeightedStringSlice{&nbsp; &nbsp; Strings: []string{"dog", "cat", "bird"},&nbsp; &nbsp; Weights: map[string]int{"dog": 2, "cat": 3, "bird": 1},}sort.Sort(&data)fmt.Printf("%v\n", data.Strings)Live Demo
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go