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

在 Go 中可以比较两个字符串:


package main


func main() {

    println("ab" > "ba")

    println("ab" < "ba")

}

false

true


Program 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)

}

如果这个实现是通用的就更好了。


素胚勾勒不出你
浏览 126回答 1
1回答

慕神8447489

编写一个比较器和一个 less 函数sort.Slices将是在标准库中执行此操作的最有效方法。稍稍跳出一步(直到标准库中的泛型使用最终确定),在 Go 1.18 中,我们可以使用golang.org/x/exp/constraints和golang.org/x/exp/slices包对有序值的切片进行一般排序:https ://go.dev/play/p/MA0lY6POVFRfunc SortSlices[T constraints.Ordered](s [][]T) {&nbsp; &nbsp; sort.Slice(s, func(i, j int) bool {&nbsp; &nbsp; &nbsp; &nbsp; return slices.Compare(s[i], s[j]) < 0&nbsp; &nbsp; })}有关的文档slices.Compare:Compare 比较 s1 和 s2 的元素。元素按顺序进行比较,从索引 0 开始,直到一个元素不等于另一个元素。返回第一个不匹配元素的比较结果。如果两个切片在其中一个结束之前都相等,则认为较短的切片小于较长的切片。如果 s1 == s2,结果为 0,如果 s1 < s2,则结果为 -1,如果 s1 > s2,则结果为 +1。涉及浮点 NaN 的比较将被忽略。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go