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.