【笔记】Go结构体自定义排序

前言

Go通过实现接口实现结构体自定义排序

定义自定义结构体

1
2
3
4
5
type User struct {
Id int
}

type UserSlice []User

实现接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Len 获取切片长度
func (userSlice UserSlice) Len() int {
return len(userSlice)
}

// Less 定义排序条件,如果返回false,就进行位置交换
func (userSlice UserSlice) Less(i, j int) bool {
return userSlice[i].Id < userSlice[j].Id
}

// Swap 定义元素交换方式
func (userSlice UserSlice) Swap(i, j int) {
userSlice[i], userSlice[j] = userSlice[j], userSlice[i]
}

调用排序方法

1
2
3
4
// 定义变量
var users = UserSlice{User{2}, User{1}, User{3}}
// 进行排序
sort.Sort(users)

完成

参考文献

哔哩哔哩——尚硅谷