1. 介绍
文档地址:https://pkg.go.dev/sort
Go 标准库 sort 用于进行数组的排序。
字符串数组排序:
names := []string{"Tom", "Mike", "Will"}
sort.Strings(names)
通过实现接口 Interface 的方法 Len/Swap/Less,然后对结构体进行排序:
type Person struct {
Name string
Age int
}
type ByAge []Person
func (a ByAge) Len() int { return len(a) }
func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
func main() {
people := []Person{
{"Bob", 31},
{"John", 42},
{"Michael", 17},
{"Jenny", 26},
}
sort.Sort(ByAge(people))
}
2. 类型
2.1 Interface
作为一些排序函数的对象必须实现 Interface 接口。
类型定义:
type Interface interface {
// Len is the number of elements in the collection.
Len() int
// Less reports whether the element with index i
// must sort before the element with index j.
Less(i, j int) bool
// Swap swaps the elements with indexes i and j.
Swap(i, j int)
}
2.2 IntSlice
类型定义:
type IntSlice []string
方法:
func (x IntSlice) Len() int
func (x IntSlice) Less(i, j int) bool
func (p IntSlice) Search(x int) int
func (x IntSlice) Sort()
func (x IntSlice) Swap(i, j int)
2.3 Float64Slice
类型定义:
type Float64Slice []float64
方法:
func (x Float64Slice) Len() int
func (x Float64Slice) Less(i, j int) bool
func (p Float64Slice) Search(x float64) int
func (x Float64Slice) Sort()
func (x Float64Slice) Swap(i, j int)
2.4 StringSlice
类型定义:
type StringSlice []string
方法:
func (x StringSlice) Len() int
func (x StringSlice) Less(i, j int) bool
func (p StringSlice) Search(x string) int
func (x StringSlice) Sort()
func (x StringSlice) Swap(i, j int)
3. 函数
// Slice 数组排序,指定小于函数
func Slice(x any, less func(i, j int) bool)
// Sort 数组排序
func Sort(data Interface)
// Stable 数组排序,排序确保稳定,原先相等的元素排序后不改变相对顺序
func Stable(data Interface)
// Reverse 数组倒序
func Reverse(data Interface) Interface
// IsSorted 是否有序
func IsSorted(data Interface) bool
// Ints int数组排序
func Ints(x []int)
// IntsAreSorted 判断数组是否递增
func IntsAreSorted(x []int) bool
// Float64s float64数组排序
func Float64s(x []float64)
// Float64sAreSorted 判断数组是否递增
func Float64sAreSorted(x []float64) bool
// Strings string数组排序
func Strings(x []string)
// StringsAreSorted 判断数组是否递增
func StringsAreSorted(x []string) bool
// Find 二分搜索查找,cmp(i)<=0 的最小下标
func Find(n int, cmp func(int) int) (i int, found bool)
// Search 二分搜索查找,f(i)==true 的最小下标
func Search(n int, f func(int) bool) int
// 查询数组中特定值
func SearchInts(a []int, x int) int
func SearchFloat64s(a []float64, x float64) int
func SearchStrings(a []string, x string) int