Go语言进阶3
创建时间:
字数:348
阅读:
sort包
sort包实现了三种基本的排序方法,插入,快排和堆排
使用sort包时无需考虑具体细节
sort.Interface接口定义了三个方法
Len()
集合长度
Less()
比较
Swap()
交换位置
sort包原生支持[]int,[]float64,[]string三种内建数据类型的切片排序操作
默认升序,
简单实现降序排列的例子:
1 2 3 4 5 6 7 8 9 10 11 12
| package main
import ( "fmt" "sort" )
func main() { a := []int{4, 3, 2, 1, 5, 9, 8, 7, 6} sort.Sort(sort.Reverse(sort.IntSlice(a))) fmt.Println("After reversed: ", a) }
|
自定义sort.Interface排序
如果是具体的某个结构体的排序,就需要自己实现Interface了
排序需要实现sort.Interface接口的三个方法,即:Len(),Swap(i, j int),Less(i, j int)
下面是一个自行实现sort的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package main
import ( "fmt" "sort" )
type person struct { Name string Age int }
type personSlice []person
func (s personSlice) Len() int { return len(s) } func (s personSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s personSlice) Less(i, j int) bool { return s[i].Age < s[j].Age }
func main() { a := personSlice{ { Name: "AAA", Age: 55, }, { Name: "BBB", Age: 22, }, { Name: "CCC", Age: 0, }, { Name: "DDD", Age: 22, }, { Name: "EEE", Age: 11, }, } sort.Sort(a) fmt.Println("Sort:", a)
sort.Stable(a) fmt.Println("Stable:", a)
}
|
sort.Slice
使用了反射,一般不建议使用
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 583614868@qq.com
文章标题:Go语言进阶3
文章字数:348
本文作者:钟帅豪
发布时间:2019-11-27, 10:20:13
最后更新:2019-11-27, 11:05:37
原始链接:http://jhshz520.github.io/2019/11/27/Go语言进阶3/
版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。