在 Go 中可以比较两个字符串:
package main
func main() {
println("ab" > "ba")
println("ab" < "ba")
}
Run Code Online (Sandbox Code Playgroud)
false
true
Program exited.
Run Code Online (Sandbox Code Playgroud)
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)
}
Run Code Online (Sandbox Code Playgroud)
如果这个实现是通用的那就更好了。
编写比较器和 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
})
}
Run Code Online (Sandbox Code Playgroud)
有关以下内容的文档slices.Compare:
Compare 比较 s1 和 s2 的元素。从索引 0 开始按顺序比较元素,直到一个元素不等于另一个元素。返回第一个不匹配元素的比较结果。如果两个切片在其中一个结束之前都相等,则认为较短的切片小于较长的切片。如果 s1 == s2,结果为 0;如果 s1 < s2,结果为 -1;如果 s1 > s2,结果为 +1。涉及浮点 NaN 的比较将被忽略。