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是关键,实现的是排序的逻辑,里面实现了将哪个字段按照什么顺序排列的。

 

posted @ 2018-04-21 15:40  Joestar  阅读(684)  评论(0编辑  收藏  举报