49

我正在尝试对 Go 中的整数切片进行反向排序。

  example := []int{1,25,3,5,4}
  sort.Ints(example) // this will give me a slice sorted from 1 to the highest number

我如何对其进行排序以使其从最高到最低?所以 [25 5 4 3 1]

我试过这个

sort.Sort(sort.Reverse(sort.Ints(keys)))

来源: http: //golang.org/pkg/sort/#Reverse

但是,我收到以下错误

# command-line-arguments
./Roman_Numerals.go:31: sort.Ints(keys) used as value
4

3 回答 3

76

sort.Ints是对几个整数进行排序的便捷函数。通常,如果要对某些内容进行排序,则需要实现sort.Interface接口,而sort.Reverse只返回该接口的不同实现,该接口重新定义了Less方法。

幸运的是,排序包包含一个名为IntSlice的预定义类型,它实现了 sort.Interface:

keys := []int{3, 2, 8, 1}
sort.Sort(sort.Reverse(sort.IntSlice(keys)))
fmt.Println(keys)
于 2013-08-20T19:19:06.440 回答
7
package main

import (
        "fmt"
        "sort"
)

func main() {
        example := []int{1, 25, 3, 5, 4}
        sort.Sort(sort.Reverse(sort.IntSlice(example)))
        fmt.Println(example)
}

操场


输出:

[25 5 4 3 1]
于 2013-08-20T19:21:21.387 回答
2

除了使用两个函数调用和一个强制转换之外,您还可以只使用sort.Slice

package main

import (
   "fmt"
   "sort"
)

func main() {
   example := []int{1,25,3,5,4}
   sort.Slice(example, func(a, b int) bool {
      return example[b] < example[a]
   })
   fmt.Println(example)
}

https://golang.org/pkg/sort#Slice

于 2021-06-30T03:37:46.307 回答