007_对go语言中的自定义排序sort的小练习
在go语言基础知识中,有个知识点是go语言的自定义排序,我在学习完之后,自己做了一些小练习和总结。
首先按照惯例,还是呈上代码演示:
package main import "fmt" import "sort" 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}, {"chl", 29}, {"xiaoming", 27}, {"xiaowang", 18}, } fmt.Println(people) sort.Sort(Byage(people)) fmt.Println(people) }
代码的运行结果如下,第二行的打印可以看到,是按照年龄排序的:
[{Bob 31} {chl 29} {xiaoming 27} {xiaowang 18}] [{xiaowang 18} {xiaoming 27} {chl 29} {Bob 31}]
我们简要叙述下以上代码的逻辑:首先定义了Person的结构体,结构体包含连个字段,一个是名字,一个是年龄。然后定义该结构体的分片。接着,实现了sort自定义排序的接口的三个方法,分别是Len,Swap,Less。最终就可以用sort.Sort(Function(Type))来排序了。
其中,Len的作用是返回要排序的分片的长度。Swap的作用是交换分片中字段的位置。Less是关键,实现的是排序的逻辑,里面实现了将哪个字段按照什么顺序排列的。