我们可以检查一段字符串是否被排序
var slice = []string { "a", "b }
sort.StringsAreSorted(slice)
Run Code Online (Sandbox Code Playgroud)
但是,当您拥有 struct 并且想知道该 struct 的切片是否按某个成员排序时呢?
type Person struct {
Name string
LastName string
}
var p = []Person{ {"John", "Smith" }, { "Ben", "Smith" } }
sort.StringsAreSorted(p???)
Run Code Online (Sandbox Code Playgroud)
如果您的类型实现了sort.Interface,只需使用该sort.IsSorted()函数。
如果没有,您可以使用sort.SliceIsSorted(),传递一个less()决定/指定 order(ing)的函数:
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)
Run Code Online (Sandbox Code Playgroud)
这将输出(在Go Playground上尝试):
Sorted by name: false
Sorted by last name: true
Run Code Online (Sandbox Code Playgroud)
如果您查看这些函数的实现,它们会使用一个简单的循环来迭代元素并判断彼此相邻的元素是否不违反顺序(less()函数)。您也可以轻松地使用 for 循环。
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |