我知道我们可以用
sort.Sort(sort.Reverse(sort.IntSlice(example)))
对数组进行排序。
但是如何获取数组的索引?
例如
example := []int{1, 25, 3, 5, 4}
我想得到输出:1、3、5、4、2
为此创建一个包装器,sort.IntSlice以记住索引并在交换值时交换它们:
sort.IntSlice
type Slice struct { sort.IntSlice idx []int } func (s Slice) Swap(i, j int) { s.IntSlice.Swap(i, j) s.idx[i], s.idx[j] = s.idx[j], s.idx[i] }
游乐场:http : //play.golang.org/p/LnSLfe- fXk。
编辑: 正如DaveC在评论中提到的那样,您实际上可以环绕sort.Interface以为任何可排序类型创建数据结构:
sort.Interface
type Slice struct { sort.Interface idx []int } func (s Slice) Swap(i, j int) { s.Interface.Swap(i, j) s.idx[i], s.idx[j] = s.idx[j], s.idx[i] }