Go 排序
Posted liuhmmjj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 排序相关的知识,希望对你有一定的参考价值。
示例代码:
import (
"fmt"
"sort"
)
type Person struct{
name string
age int8
}
type PersonSortList []Person
func (p PersonSortList) Len() int {
return len(p)
}
func (p PersonSortList) Swap(i, j int) {
p[i],p[j] = p[j],p[i]
}
func (p PersonSortList)Less(i,j int) bool{
return p[i].age < p[j].age
}
func (p Person)Dream()int{
fmt.Printf("%s的梦想是学好Go语言",p.name)
return 0
}
func NewPerson(name string,age int8) Person{
return Person{
name:name,
age:age,
}
}
func (p *Person) SetAge(newAge int8){
p.age = newAge
}
func main(){
people := make([]Person , 0)
var pp1 = NewPerson("Yang",29)
people = append(people, pp1)
var pp2 = NewPerson("Tong",27)
people = append(people, pp2)
var pp3 = NewPerson("Wen",23)
people = append(people, pp3)
var pp4 = NewPerson("Liu",31)
people = append(people, pp4)
//使用自定义比较器排序
sort.SliceStable(people, func(i, j int) bool {
return people[i].age < people[j].age
})
fmt.Println(people)
fmt.Println("***********************")
//排序任意数据结构
//使用sort.Sort或者sort.Stable函数
//他们可以排序实现了sort.Interface接口的任意类型
//一个内置的排序算法需要知道三个东西:序列的长度,表示两个元素比较的结果,一种交换两个元素的方式
c:=PersonSortList(people)
sort.Sort(PersonSortList(people))
fmt.Println(people)
fmt.Println("*************************")
fmt.Println(c)
fmt.Println("*************************")
s := []int{4, 2, 3, 1}
//对于[]int, []float, []string这种元素类型是基础类型的切片使用sort包提供的几个函数进行排序
sort.Ints(s)
fmt.Println(s) // 输出[1 2 3 4]
}
结果:
[{Wen 23} {Tong 27} {Yang 29} {Liu 31}]
***********************
[{Wen 23} {Tong 27} {Yang 29} {Liu 31}]
*************************
[{Wen 23} {Tong 27} {Yang 29} {Liu 31}]
*************************
[1 2 3 4]
以上是关于Go 排序的主要内容,如果未能解决你的问题,请参考以下文章
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段