Golang 检查给定的切片是否已排序
在Go语言中,切片比数组更强大、灵活、便捷,是一种轻量级数据结构。切片是一个可变长度的序列,它存储相似类型的元素,不允许在同一切片中存储不同类型的元素。
在Go语言中,您可以通过 SliceIsSorted() 函数来检查给定的切片是否已排序。如果给定的切片已排序,则此函数返回true。如果给定的切片未排序,则返回false。如果指定的接口不是切片类型,则此函数将导致panic。它定义在sort包中,因此您必须在程序中导入sort包才能访问SliceIsSorted函数。
语法:
func SliceIsSorted(a_slice interface{}, less func(p, q int) bool) bool
示例:
// Go程序演示如何检查
// 给定的切片是否已排序
package main
import (
"fmt"
"sort"
)
// Main函数
func main() {
// 创建并初始化
// 一个结构
Author := []struct {
a_name string
a_article int
a_id int
}{
{"Mina", 304, 1098},
{"Cina", 634, 102},
{"Tina", 104, 105},
{"Rina", 10, 108},
{"Sina", 234, 103},
{"Vina", 237, 106},
{"Rohit", 56, 107},
{"Mohit", 300, 104},
{"Riya", 4, 101},
{"Sohit", 20, 110},
}
// 按名称对作者进行排序
// 使用Slice()函数
sort.Slice(Author, func(p, q int) bool {
return Author[p].a_name < Author[q].a_name })
// 检查切片是否按名称排序
// 使用SliceIsSorted函数
res1 := sort.SliceIsSorted(Author, func(p, q int) bool {
return Author[p].a_name < Author[q].a_name })
if res1 == true {
fmt.Println("切片按名称排序")
} else {
fmt.Println("切片未按名称排序")
}
// 检查切片是否按总文章数排序
// 使用SliceIsSorted函数
res2 := sort.SliceIsSorted(Author, func(p, q int) bool {
return Author[p].a_article < Author[q].a_article })
if res2 == true {
fmt.Println("切片按总文章数排序")
} else {
fmt.Println("切片未按总文章数排序")
}
// 按ID对作者进行排序
// 使用Slice()函数
sort.Slice(Author, func(p, q int) bool {
return Author[p].a_id < Author[q].a_id })
// 检查切片是否按ID排序
// 使用SliceIsSorted函数
res3 := sort.SliceIsSorted(Author, func(p, q int) bool {
return Author[p].a_id < Author[q].a_id })
if res3 == true {
fmt.Println("切片按ID排序")
} else {
fmt.Println("切片未按ID排序")
}
}
输出:
切片按名称排序
切片未按总文章数排序
切片按ID排序