"ba") println("ab" < "ba") } false tr" />
登录
首页 >  Golang >  Go问答

在 Go 中如何对切片进行排序并比较两个切片

来源:stackoverflow

时间:2024-02-20 13:24:27 101浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《在 Go 中如何对切片进行排序并比较两个切片》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

在 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)
}

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


正确答案


sort.slices 编写比较器和 less 函数将是在标准库中执行此操作的最有效方法。 稍微超出这一点(直到标准库中的泛型使用最终确定),在 go 1.18 中,我们可以使用 golang.org/x/exp/constraintsgolang.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 的比较将被忽略。

终于介绍完啦!小伙伴们,这篇关于《在 Go 中如何对切片进行排序并比较两个切片》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>