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

时间:2019-05-27 10:08:03

标签: sorting go slice

我们可以检查字符串的一部分是否用

排序
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???)

1 个答案:

答案 0 :(得分:3)

如果您的类型实现了http://qaru.site/questions/2455460/expo-cannot-find-a-module-logreporter,只需使用sort.Interface函数。

如果没有,您可以使用sort.IsSorted(),并传递一个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)

这将输出(在sort.SliceIsSorted()上尝试):

Sorted by name: false
Sorted by last name: true

如果您研究这些函数的实现,它们将使用一个简单的循环来遍历元素,并确定彼此相邻的元素是否不违反顺序(less()函数)。您也可以轻松地使用for循环。