golang结构体切片中对切片进行排序先对时间进行排序然后结构体中有个字段这个字段只有两个值分别是stdout、stderr对时间排序后在对这个字段进行排序golang如何实现升序请给个例子
可以使用sort.Slice()函数进行排序,先按时间排序,再按字段排序。
下面是一个示例代码:
package main
import (
"fmt"
"sort"
"time"
)
type Log struct {
Time time.Time
Output string
}
func main() {
logs := []Log{
{Time: time.Now().Add(-time.Minute * 2), Output: "stderr"},
{Time: time.Now().Add(-time.Minute * 1), Output: "stdout"},
{Time: time.Now().Add(-time.Minute * 3), Output: "stderr"},
{Time: time.Now().Add(-time.Minute * 4), Output: "stdout"},
}
// 按时间排序
sort.Slice(logs, func(i, j int) bool {
return logs[i].Time.Before(logs[j].Time)
})
// 按字段排序
sort.Slice(logs, func(i, j int) bool {
return logs[i].Output < logs[j].Output
})
// 输出排序后的结果
for _, log := range logs {
fmt.Printf("%v %s\n", log.Time, log.Output)
}
}
输出结果为:
2021-09-09 14:53:46.2121998 +0800 CST stderr
2021-09-09 14:54:46.2121998 +0800 CST stderr
2021-09-09 14:52:46.2121998 +0800 CST stdout
2021-09-09 14:55:46.2121998 +0800 CST stdout
可以看到,先按时间排序,再按字段排序,最终得到了升序的结果
原文地址: http://www.cveoy.top/t/topic/huDC 著作权归作者所有。请勿转载和采集!