Skip to content

排序

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)
}