目录
【1】数组切片排序
切片是引用类型,所以不需要其他变量接收返回值。
//对数组切片进行排序
intSlice := []int{10, -1, 6, -4, 0}
sort.Ints(intSlice)
【2】对结构体切片进行排序
查看go语言标准库文档,使用sort.Sort()可以对结构体切片进行排序。 参数是一个接口,该接口里声明了 len() Less() Swap() 三个方法,所以我们要排序的结构体需要依次实现这三个方法。
package main
import (
"fmt"
"math/rand"
"sort"
)
// 1.声明Hero结构体
type Hero struct {
Name string
Age int
}
// 2.声明一个Hero结构体的切片
type HeroSlice []Hero
// 3.实现Interface接口
func (hs HeroSlice) Len() int {
return len(hs)
}
// Less方法就是决定你是降序还是升序
// 1.按Hero的年龄从小到大升序
func (hs HeroSlice) Less(i, j int) bool {
return hs[i].Age < hs[j].Age
}
func (hs HeroSlice) Swap(i, j int) {
hs[i], hs[j] = hs[j], hs[i]
}
func main() {
//对结构体切片排序
var heroes HeroSlice
for i := 0; i < 10; i++ {
heroes = append(heroes, Hero{
Name: fmt.Sprintf("英雄~%d", rand.Intn(100)),
Age: rand.Intn(100),
})
}
for _, v := range heroes {
fmt.Println(v)
}
fmt.Println("---------------排序前后对比---------------")
sort.Sort(heroes)
for _, v := range heroes {
fmt.Println(v)
}
}