程序开发 · 2023年11月26日

如何检查自定义结构体的切片是否已排序?

当前位置: > > > > 如何检查自定义结构体的切片是否已排序?

来源:stackoverflow
2024-04-20 18:09:36
0浏览
收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《如何检查自定义结构体的切片是否已排序?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!

问题内容

我们可以检查字符串切片是否已排序

var slice = []string { "a", "b }

sort.stringsaresorted(slice)

但是当您有一个结构体并且您想知道该结构体的一部分是否按某个成员排序时该怎么办?

type Person struct {
  Name string
  LastName string
}

var p = []Person{ {"John", "Smith" }, { "Ben", "Smith" } }

sort.StringsAreSorted(p???)

解决方案

如果您的类型实现 ,只需使用 函数即可。

如果没有,您可以使用 ,传递一个 less() 函数来决定/指定顺序:

sortedbyname := sort.sliceissorted(p, func(i, j int) bool {
    return p[i].name < p[j].name
})
fmt.println("sorted by name:", sortedbyname)

sortedbylastname := sort.sliceissorted(p, func(i, j int) bool {
    return p[i].lastname < p[j].lastname
})
fmt.println("sorted by last name:", sortedbylastname)

这将输出(在 上尝试):

Sorted by name: false
Sorted by last name: true

如果您研究这些函数的实现,它们会使用一个简单的循环来迭代元素并判断相邻的元素是否不违反顺序(less() 函数)。您也可以轻松地使用 for 循环。

好了,本文到此结束,带大家了解了《如何检查自定义结构体的切片是否已排序?》,希望本文对你有所帮助!关注公众号,给大家分享更多Golang知识!