Go排序
本文鏈接:https://blog.csdn.net/u011304970/article/details/71447148
簡介
Go的sort包提供了排序功能。包括基本類型的排序和自定義數(shù)據(jù)(通常是結(jié)構(gòu)體數(shù)組)的排序。
基本類型的排序
sort提供了以下API對基本類型進(jìn)行排序,查找
自定義類型的排序
自定義類型的排序分為兩種,一種是通過傳遞函數(shù)值,一種是通過實現(xiàn)接口
傳遞函數(shù)值
// 對slice排序 func Slice(slice interface{}, less func(i, j int) bool) func SliceStable(slice interface{}, less func(i, j int) bool) // 穩(wěn)定排序 // 判斷是否已經(jīng)排序 func SliceIsSorted(slice interface{}, less func(i, j int) bool) bool // 二分法查找,這個函數(shù)很有意思,它查找并返回使函數(shù)f返回true和返回false的臨界點(見下例) func Search(n int, f func(int) bool) intSlice()和SliceIsSorted()用法
package mainimport ("fmt""sort" )type Person struct {Name stringAge int }func main() {persons := []Person{Person{"Gopher", 11},Person{"Monkey", 12},Person{"Cynhard", 5},}// 按照名字排序less := func(i, j int) bool {return persons[i].Name < persons[j].Name}fmt.Println(sort.SliceIsSorted(persons, less)) // falsesort.Slice(persons, less)fmt.Println(persons) // [{Cynhard 5} {Gopher 11} {Monkey 12}]fmt.Println(sort.SliceIsSorted(persons, less)) // true }Search()用法
package mainimport ("fmt""sort" )func main() {ints := []int{22, 34, 21, 32, 54, 64, 49, 43}sort.Ints(ints)fmt.Println(ints) // [21 22 32 34 43 49 54 64]// ints[0]~ints[1]都小于32,ints[2]~ints[7]都大于等于32// 因此臨界點索引為2,found==2found := sort.Search(len(ints), func(i int) bool {return ints[i] >= 32})fmt.Println(found) // 2if found < len(ints) && ints[found] == 32 {fmt.Printf("32 found at index %d\n", found)} else { // 沒有找到32,但是返回了32應(yīng)該插入的位置fmt.Println("32 not found")}// 由于找不到一個臨界點,使序列左邊為32,右邊不為32// 所以返回len(ints),found==8found = sort.Search(len(ints), func(i int) bool {return ints[i] == 32})fmt.Println(found) // 8 }實現(xiàn)接口
sort提供了一個接口:sort.Interface,所有滿足這個接口的自定義類型都可以進(jìn)行排序。API如下
例如:
package mainimport ("fmt""sort" )type Person struct {Name stringAge int }type PerColl []Personvar persons PerCollfunc (PerColl) Len() int {return len(persons) }func (PerColl) Less(i, j int) bool {return persons[i].Name < persons[j].Name }func (PerColl) Swap(i, j int) {persons[i], persons[j] = persons[j], persons[i] }func main() {persons = []Person{Person{"Cynhard", 5},Person{"Gopher", 11},Person{"Monkey", 12},}sort.Sort(persons)fmt.Println(persons) // [{Cynhard 5} {Gopher 11} {Monkey 12}]fmt.Println(sort.IsSorted(persons)) // truesort.Sort(sort.Reverse(persons)) fmt.Println(persons) // [{Monkey 12} {Gopher 11} {Cynhard 5}] }轉(zhuǎn)載于:https://www.cnblogs.com/nyist-xsk/p/11365447.html
總結(jié)
- 上一篇: golang 二维切片
- 下一篇: Java虚拟机详解(五)------JV