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

I know we can use

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

to sort a array.

But how can I get the indices of the array?

e.g.

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

I want to get the output: 1, 3, 5, 4, 2

Make a wrapper for sort.IntSlice that remembers the indexes and swaps them when it swaps the values:

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]
}

Playground: http://play.golang.org/p/LnSLfe-fXk.

EDIT: As DaveC mentioned in the comments, you can actually wrap around sort.Interface to create a data structure for any sortable type:

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]
}