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

This question already has an answer here:

This answer here Sorting by time.Time in Golang

tries to sort with a secondary array with a map

type timeSlice []reviews_data

Can golang slices of objects with dates be sorted by without creating this secondary data structure?

Given a struct like

type SortDateExample struct {
    sortByThis time.Time
    id string
}    

And a slice initialized something like

var datearray = var alerts = make([]SortDateExample, 0)
dateSlice = append(dateSlice,newSortDateExmple)
dateSlice = append(dateSlice,newSortDateExmple2)
dateSlice = append(dateSlice,newSortDateExmple3)

How can I sort array by the time field sortByThis?

</div>

With Go 1.8 and above

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

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

With Go below 1.8

In that case, you don't need a map, but you do need to define a type for your array:

type SortedDateExampleArray []SortDateExample

Then you need that array type to implement the methods in 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]
}

And then you can use sort.Sort to sort your custom array.

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