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方法第一个参数...