当前位置: 首页 > 面试题库 >

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

冯峻
2023-03-14
问题内容

我知道我们可以用

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

对数组进行排序。

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

例如

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

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


问题答案:

为此创建一个包装器,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]
}


 类似资料:
  • 问题内容: 问题:考虑以下float []: 我想要的是一个int []数组,它表示带有索引的原始数组的顺序。 当然,可以使用自定义比较器,一组自定义对象集或通过简单地对数组进行排序,然后在原始数组中搜索索引(关闭)来完成。 我实际上正在寻找的是Matlab的sort函数的第二个return参数的等效项。 是否有一种简单的方法(<5 LOC)?可能有不需要为每个元素分配新对象的解决方案吗? 更新:

  • 假设我在R中有一个数组:在排序时,这将是: 在R中,从原始数组返回已排序数组元素的索引的最佳方法是什么。我正在寻找一个类似的输出:6(索引为2)、4(索引为3)、3(索引为4)、2(索引为7)、5(索引为8)、1(索引为10)

  • 本文向大家介绍编写Golang程序以搜索排序数组中的元素,包括了编写Golang程序以搜索排序数组中的元素的使用技巧和注意事项,需要的朋友参考一下 解决这个问题的方法 步骤1:将数组从第0个索引迭代到n-1,其中n是给定数组的大小。 步骤2:声明low = 0th索引和high = n-1。启动一个for循环,直到低电平小于高电平为止。 步骤3:找到mid =(low + high)/ 2,如果中

  • 问题内容: 就像标题听起来一样简单。我需要获取最后插入的项的索引/键。为什么这很难?请参见以下两个代码示例: 写道: 当然,这似乎可以正常工作,但请参见以下内容: 写道: 简而言之,流行的解决方法存在缺陷。 问题答案: 这是一个线性( 最快的 )解决方案:

  • 我已经制作了一个包含字符串键和整数值的Hashmap。更具体地说,我从twitter API收集数据,并根据每个用户的关注者数量按降序对我的HashMap进行排序。 例如: @jeremy23:13.200追随者 @布兰登WW:10.343 @航空:6.002。。。 我想做的下一件事是制作一个一维数组,其中仅包含用户的姓名(但保持排序给我的顺序)。我的目标是制作一个包含最多以下人员的排名数组。我的

  • 我真的被困在这件事上了,我很想得到你的帮助 我正在尝试编写一个带有签名的方法: 该方法以循环排序的二维数组和搜索num的值作为参数获取。如果值num在mat数组中,则该方法返回true。如果num值不在mat数组中,则该方法返回false。 如果第1季度的所有值都比第2季度的值小,第2季度的值比第3季度的值小,第3季度的值比第4季度的值小,那么该数组就是圆形的。 例如,以下数组是循环排序的: 如果