我知道我们可以使用
sort.Sort(sort.Reverse(sort.IntSlice(example)))
对数组进行排序。
但是如何获得数组的索引?
e.g。
example := []int{1, 25, 3, 5, 4}
我想得到输出:1,3,5,4,2
答案 0 :(得分:13)
为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
来为任何可排序类型创建数据结构:
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]
}
答案 1 :(得分:0)
您也可以只获取索引并避免原位变异切片,请参见https://github.com/mkmik/argsort