Appearance
排序
go中有强悍的排序包sort
普通排序
- go 分别提供了 sort.Ints() 、 sort.Float64s() 和 sort.Strings() 函数, 默认都是从小到大排序。
go
var slice []int
slice = append(slice, 7, 6, 2, 4, 1, 6)
sort.Ints(slice)
sort.Sort(slice)
fmt.Printf("%+v", slice)
自定义排序
- sort 包有3个方法Len() 、 Less(i,j) 和 Swap(i,j) 。
- 通用排序函数 sort.Sort 可以排序任何实现了 sort.Inferface 接口的对象(变量)。
go
type Student struct {
Name string
Age int
}
//自定义排序:len()
func (s Students) Len() int {
return len(s)
}
//自定义排序:less()
func (s Students) Less(i, j int) bool {
return s[i].Age < s[j].Age
}
//自定义排序:swap()
func (s Students) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func main() {
type Students []Student
students = append(students, Student{Name: "zhangsan", Age: 30})
students = append(students, Student{Name: "lisi", Age: 18})
students = append(students, Student{Name: "wangwu", Age: 26})
students = append(students, Student{Name: "qianqi", Age: 17})
students = append(students, Student{Name: "guanzhan", Age: 28})
//方式1 根据闭包排序
var students Students
sort.Slice(students, func(i, j int) bool {
return students[i].Age > students[j].Age
})
fmt.Printf("%+v", students)
// 方式2 自定义排序
// sort 包有3个方法Len() 、 Less(i,j) 和 Swap(i,j) 。
// 通用排序函数 sort.Sort 可以排序任何实现了 sort.Inferface 接口的对象(变量)。
sort.Sort(students)
fmt.Printf("%+v", students)
}