最近碰上了一个需求,要得到排序后的原索引序列。
我又不希望自己重新实现一快排出来,所以在接口上重新封装了一下。package mainimport ( "fmt" "sort")type SortIndexs struct { sort.IntSlice // 可以替换成其他实现了 sort.Interface indexs []int}func (p *SortIndexs) Swap(i, j int) { p.IntSlice.Swap(i, j) p.indexs[i], p.indexs[j] = p.indexs[j], p.indexs[i]}func NewSortIndexs(arr []int) *SortIndexs { s := &SortIndexs{IntSlice: sort.IntSlice(arr), indexs: make([]int, len(arr))} for i := range s.indexs { s.indexs[i] = i // 原有排序 indexs } return s}func main() { s := NewSortIndexs([]int{5,8,10,2,9,6}) sort.Sort(s) fmt.Println(s.indexs) fmt.Println(s.IntSlice)}
输出
[3 0 5 1 4 2][2 5 6 8 9 10]