为了账号安全,请及时绑定邮箱和手机立即绑定

我如何在 Go 中对某物的一片切片进行排序(我如何比较两个切片)

我如何在 Go 中对某物的一片切片进行排序(我如何比较两个切片)

Go
素胚勾勒不出你 2022-12-19 20:27:19
在 Go 中可以比较两个字符串:package mainfunc main() {    println("ab" > "ba")    println("ab" < "ba")}falsetrueProgram exited.https://go.dev/play/p/svkLf6R84SC如何对两个切片执行类似的操作?例如[]int{1,2} > []int{2,1}。我需要它来对一片整数进行排序。所以我需要一个实现sort.Interface。type Interface interface {    Len() int    Less(i, j int) bool    Swap(i, j int)}如果这个实现是通用的就更好了。
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

编写一个比较器和一个 less 函数sort.Slices将是在标准库中执行此操作的最有效方法。稍稍跳出一步(直到标准库中的泛型使用最终确定),在 Go 1.18 中,我们可以使用golang.org/x/exp/constraints和golang.org/x/exp/slices包对有序值的切片进行一般排序:https ://go.dev/play/p/MA0lY6POVFR


func SortSlices[T constraints.Ordered](s [][]T) {

    sort.Slice(s, func(i, j int) bool {

        return slices.Compare(s[i], s[j]) < 0

    })

}

有关的文档slices.Compare:


Compare 比较 s1 和 s2 的元素。元素按顺序进行比较,从索引 0 开始,直到一个元素不等于另一个元素。返回第一个不匹配元素的比较结果。如果两个切片在其中一个结束之前都相等,则认为较短的切片小于较长的切片。如果 s1 == s2,结果为 0,如果 s1 < s2,则结果为 -1,如果 s1 > s2,则结果为 +1。涉及浮点 NaN 的比较将被忽略。


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信