doubao7287
2015-06-30 14:34
浏览 431
已采纳

在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

图片转代码服务由CSDN问答提供 功能建议

我知道我们可以使用

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

对数组进行排序。

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

例如

 示例:= [] int {1、25、3、5、4} 
    
 
 

我想获取输出:1、3、5、4、2

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • drsh30452 2015-06-30 14:47
    已采纳

    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]
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题