Sorting 在Go on多个结构字段中排序

Sorting 在Go on多个结构字段中排序,sorting,go,Sorting,Go,我有一组成员: type SomeType struct { timeStamp time typeName string other variables... } 基于typeName,此结构上有3种方法,如: isTypeA(): returns bool isTypeB(): returns bool isTypeC(): returns bool 现在,我的排序需要这样做: -基于时间戳按升序排序 -如果时间戳相同,那么typeA应该在typeB之前,而typ

我有一组成员:

type SomeType struct {
    timeStamp time
    typeName string
    other variables...
}
基于typeName,此结构上有3种方法,如:

isTypeA(): returns bool
isTypeB(): returns bool
isTypeC(): returns bool
现在,我的排序需要这样做: -基于时间戳按升序排序 -如果时间戳相同,那么typeA应该在typeB之前,而typeB应该在typeC之前。 (类型A、B、C实际上不是按字母顺序排列的)


我使用sort.Slice根据时间戳进行排序,但我不确定如何进行类型A、B、C排序。

将任意类型值转换为可以按照您的要求进行排序的内容

func ThingTypeSortable(thing *Thing) int {
    if thing == nil {
        return 0
    }

    if thing.isTypeA() {
        return 1
    }
    if thing.isTypeB() {
        return 2
    }
    if thing.isTypeC() {
        return 3
    }

    return 0
}
…那么,如果时间戳相等,则这只是另一件需要排序的事情

sort.Slice(inputs, func(i, j int) bool {
    if inputs[i].t.UTC() != inputs[j].t.UTC() {
        return inputs[i].t.Before(inputs[j].t)
    }

    return ThingTypeSortable(inputs[i]) < ThingTypeSortable(inputs[j])
})
sort.Slice(输入,func(i,j int)bool{
如果输入[i].t.UTC()!=输入[j].t.UTC(){
返回输入[i].t.Before(输入[j].t)
}
返回ThingTypeSortable(输入[i])
通过按排序优先级顺序比较字段来使用

给定类型为
[]SomeType
的变量
a
,排序如下:

sort.Slice(a, func(i, j int) bool {
    if !a[i].timeStamp.Equal(a[j].timeStamp) {
        return a[i].timeStamp.Before(a[j].timeStamp)
    }
    if a[i].isTypeA() != a[j].isTypeA() {
        return a[i].isTypeA()
    }
    if a[i].isTypeB() != a[j].isTypeB() {
        return a[i].isTypeB()
    }
    return a[i].isTypeC()
})
此代码将isTypeA()、isTypeB()和isTypeC()作为单独的字段处理,即使它们是从同一基础字段派生的

我假设您打算在
时间戳
字段中使用type
time.time
。该函数用于正确比较
time.time
值是否相等