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