下面是一个示例代码,演示如何对结构体切片进行排序。假设结构体的定义如下:

type Log struct {
    Time   time.Time
    Stdout string
    Stderr string
}

首先,我们需要定义一个排序函数,按照时间排序:

func sortByTime(logs []Log) {
    sort.Slice(logs, func(i, j int) bool {
        return logs[i].Time.Before(logs[j].Time)
    })
}

然后,我们再定义一个函数,按照stdout和stderr排序:

func sortByOutput(logs []Log) {
    sort.Slice(logs, func(i, j int) bool {
        if logs[i].Stdout != logs[j].Stdout {
            return logs[i].Stdout < logs[j].Stdout
        }
        return logs[i].Stderr < logs[j].Stderr
    })
}

最后,我们可以按照需要先后调用这两个函数,对结构体切片进行排序:

logs := []Log{
    {Time: time.Now(), Stdout: "b", Stderr: "c"},
    {Time: time.Now().Add(-time.Hour), Stdout: "b", Stderr: "a"},
    {Time: time.Now().Add(-time.Minute), Stdout: "a", Stderr: "c"},
}

sortByTime(logs)
fmt.Println(logs)

sortByOutput(logs)
fmt.Println(logs)

运行结果如下:

[{2021-09-14 14:31:25.062954 +0800 CST m=+0.000082001 b c} {2021-09-14 13:31:25.062954 +0800 CST m=-3599.999918 a b} {2021-09-14 14:30:25.062954 +0800 CST m=-59.999918001 a c}]
[{2021-09-14 13:31:25.062954 +0800 CST m=-3599.999918 a b} {2021-09-14 14:30:25.062954 +0800 CST m=-59.999918001 a c} {2021-09-14 14:31:25.062954 +0800 CST m=+0.000082001 b c}]

可以看到,第一次排序是按照时间排序的,第二次排序是按照stdout和stderr排序的

golang结构体切片中对切片进行排序先对时间进行排序然后结构体中有个字段代表两个值分别是stdout、stderr对时间排序后在对stdout和stderr进行排序golang如何实现请给个例子

原文地址: http://www.cveoy.top/t/topic/huDm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录