在 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 的比较将被忽略。
- 1 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消