sort包提供了对切片的排序和查找操作
常用函数
- Float64s:对float64类型切片进行排序
- Float64sAreSorted:判断float64类型切片是否有序
- Ints: 对Int类型切片排序
- IntsAreSorted: 判断Int类型切片是否有序
- Strings: 对String类型切片排序
- StringAreSorted:判断String类型切片是否有序
- Slice:对切片通过自定义函数进行排序
- SlicelsSorted:通过自定义函数切片是否有序
- SliceStable:对切片通过自定义函数进行排序(相同元素保证原有顺序,稳定)
- Search:在有序切片中通过自定义迭代范围,并通过自定义函数查找函数插入的位置
- SearchFloat64s: 在有序的float64类型切片中查找元素插入的位置
- SearchInts: 在有序的int类型切片中查找元素插入的位置
- SearchStrings: 在有序的string类型切片中查找元素插入的位置
实操
learnSort.go
```go package learnSort
import ( “fmt” “sort” )
func LearnSort() { // 对int类型切片排序 nums := []int{3,2,10,5,8,19,2} sort.Ints(nums) fmt.Println(nums)
// 查找int类型切片中元素插入的位置fmt.Println(sort.SearchInts(nums, 5))fmt.Println(sort.SearchInts(nums, 6))// 定义结构体切片users := []struct{id intname string}{{3, "ligz"},{2, "ligz2"},{5, "ligz5"},{10, "ligz10"},}fmt.Println(users)// 对结构体切片排序sort.Slice(users, func(i, j int) bool {return users[i].id < users[j].id})fmt.Println(users)// 查找id 是否存在于切片中for _, value := range([]int{4,5}) {idx := sort.Search(len(users), func(i int) bool {return users[i].id >= value})if idx < len(users) && users[idx].id == value {fmt.Printf("find %d index: %d\n", value, idx)} else {fmt.Printf("not found %d \n", value)}}
}
<a name="L1cSf"></a>## learnSort_test.go```gopackage learnSortimport "testing"func TestLearnSort(t *testing.T) {LearnSort()}
执行结果
[2 2 3 5 8 10 19]34[{3 ligz} {2 ligz2} {5 ligz5} {10 ligz10}][{2 ligz2} {3 ligz} {5 ligz5} {10 ligz10}]not found 4find 5 index: 2进程 已完成,退出代码为 0
