Skip to content

Instantly share code, notes, and snippets.

@xigang
Last active May 17, 2017 05:48
Show Gist options
  • Save xigang/1eac9ce3add7ea8757808fda5cc42cd9 to your computer and use it in GitHub Desktop.
Save xigang/1eac9ce3add7ea8757808fda5cc42cd9 to your computer and use it in GitHub Desktop.
Sorting by time.Time in Golang
package main
import (
"fmt"
"sort"
"time"
)
type reviews_data struct {
review_id string
date time.Time
score int
firstname string
anonymous bool
review_text string
title_text string
rating float64
upcount int
}
type timeSlice []reviews_data
func (p timeSlice) Len() int {
return len(p)
}
func (p timeSlice) Less(i, j int) bool {
return p[i].date.Before(p[j].date)
}
func (p timeSlice) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}
func main() {
var reviews_data_map = make(map[string]reviews_data)
reviews_data_map["1"] = reviews_data{date: time.Now().Add(12 * time.Hour)}
reviews_data_map["2"] = reviews_data{date: time.Now()}
reviews_data_map["3"] = reviews_data{date: time.Now().Add(24 * time.Hour)}
//Sort the map by date
date_sorted_reviews := make(timeSlice, 0, len(reviews_data_map))
for _, d := range reviews_data_map {
date_sorted_reviews = append(date_sorted_reviews, d)
}
fmt.Println(date_sorted_reviews)
sort.Sort(date_sorted_reviews)
fmt.Println(date_sorted_reviews)
}
//sort struct
type byName []cli.Command
func (a byName) Len() int { return len(a) }
func (a byName) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a byName) Less(i, j int) bool { return a[i].Name < a[j].Name }
var dockerCommands []cli.Command
// TODO(tiborvass): do not show 'daemon' on client-only binaries
func init() {
for _, cmd := range cli.DockerCommands {
dockerCommands = append(dockerCommands, cmd)
}
sort.Sort(byName(dockerCommands))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment