为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
DIEA 2021-09-27 20:44:28
似乎是一个基本问题,但找不到简单的答案。我有一片:[]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


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 229 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信