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()作为单独的字段处理,即使它们是从同一基础字段派生的
我假设您打算在时间戳
字段中使用typetime.time
。该函数用于正确比较time.time
值是否相等