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 排序的主要内容,如果未能解决你的问题,请参考以下文章

你知道的Go切片扩容机制可能是错的

排序算法总结 go实现代码

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

图解算法基础--快速排序,附 Go 代码实现

golang代码片段(摘抄)