package main
import (
"fmt"
"sort"
)
type Log struct {
UserID int
Message string
Num float64
CreateTime string
}
type Wrapper struct {
log []Log
by func(p, q *Log) bool
}
type SortBy func(p, q *Log) bool
func (pw Wrapper) Len() int { // 重写 Len() 方法
return len(pw.log)
}
func (pw Wrapper) Swap(i, j int) { // 重写 Swap() 方法
pw.log[i], pw.log[j] = pw.log[j], pw.log[i]
}
func (pw Wrapper) Less(i, j int) bool { // 重写 Less() 方法
return pw.by(&pw.log[i], &pw.log[j])
}
// 封装成 SortLog 方法
func SortLog(log []Log, by SortBy) {
sort.Sort(Wrapper{log, by})
}
func main() {
log := []Log{
{1, "签到", 1, "1563935120"},
{1, "充值", 100, "1563935320"},
}
fmt.Println(log)
//调用wrapper
sort.Sort(Wrapper{log, func(p, q *Log) bool {
return q.Num < p.Num // Num 递减排序
}})
fmt.Println(log)
//间接封装
SortLog(log, func(p, q *Log) bool {
return p.CreateTime < q.CreateTime // CreateTime 递增排序
})
fmt.Println(log)
}
golang对结构体排序,重写sort
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 知无涯之std::sort源码剖析 https://blog.csdn.net/qq_16836151/artic...
- //思想是先按照结构体里面的某个字段进行排序,然后按照该字段排序后打出完整的机构体排序后的信息 func sort...
- 重点是初始化a和赋值部分如果var a sort.StringSlice要用appendappend方法第一个参数...