在golang中排序后获取数组的索引

时间:2015-06-30 14:34:02

标签: sorting go

我知道我们可以使用

sort.Sort(sort.Reverse(sort.IntSlice(example)))

对数组进行排序。

但是如何获得数组的索引?

e.g。

example := []int{1, 25, 3, 5, 4}

我想得到输出:1,3,5,4,2

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