在go 1.2中按时间日期字段对结构切片进行排序,而无需创建二级结构

时间:2019-07-17 20:22:22

标签: sorting go time

这里的答案Sorting by time.Time in Golang

尝试对带有映射的辅助数组进行排序

type timeSlice []reviews_data

可以在不创建此辅助数据结构的情况下对带有日期的对象的golang切片进行排序吗?

给出类似的结构

type SortDateExample struct {
    sortByThis time.Time
    id string
}    

然后切片初始化了

之类的东西
var datearray = var alerts = make([]SortDateExample, 0)
dateSlice = append(dateSlice,newSortDateExmple)
dateSlice = append(dateSlice,newSortDateExmple2)
dateSlice = append(dateSlice,newSortDateExmple3)

如何按时间字段sortByThis对数组进行排序?

1 个答案:

答案 0 :(得分:2)

使用Go 1.8及更高版本

sort.Slice(dateSlice, func(i, j int) bool { 
    return dateSlice[i].sortByThis.Before(dateSlice[j].sortByThis) 
})

https://golang.org/pkg/sort/#Slice

Go低于1.8

在这种情况下,您不需要map,但确实需要为数组定义类型:

type SortedDateExampleArray []SortDateExample

然后,您需要该数组类型来实现sort.Interface中的方法。

func (a SortedDateExampleArray) Len() int {
    return len(a)
}

func (a SortedDateExampleArray) Less(i, j int) bool {
    return a[i].sortByThis.Before(a[j].sortByThis)
}

func (a SortedDateExampleArray) Swap(i, j int) {
    a[i], a[j] = a[j], a[i]
}

然后您可以使用sort.Sort对自定义数组进行排序。

https://golang.org/pkg/sort/#Sort