Le tri par le temps.De temps en Golang
Je suis en train de trier struct dans GOlang par ses membres, qui est de type temps.Temps.
la structure est comme suit.
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
}
J'ai le dessous de fonctions de tri
type timeSlice []reviews_data
//Forward request for length
func (p timeSlice) Len() int {
return len(p)
}
//Define compare
func (p timeSlice) Less(i, j int) bool {
return p[i].date.Before(p[j].date)
}
//Define swap over an array
func (p timeSlice) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}
Une carte est définie comme suit
var reviews_data_map = make(map[string]reviews_data)
Après la carte se remplit avec les valeurs,le tri de la carte par des valeurs se fait comme ci-dessous
//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)
}
sort.Sort(date_sorted_reviews)
Le problème est que le résultat n'est pas triée.Quelqu'un peut me dire quel est le problème.
Merci à l'avance.
- Êtes-vous certains qu'ils ne sont pas classés? Votre tri code est correct.
- Voici la sortie Avant de les Trier 2014-04-16 19:57:22.096 +0000 UTC 2014-04-15 20:08:07.226 +0000 UTC 2014-04-15 20:15:16.825 +0000 UTC 2014-04-15 20:17:28.726 +0000 UTC, Après le Tri 2014-04-15 20:15:16.825 +0000 UTC 2014-04-15 20:08:07.226 +0000 UTC 2014-04-15 20:17:28.726 +0000 UTC 2014-04-16 19:57:22.096 +0000 UTC
- Vous n'avez pas donné une courte et simple de programme de travail pour illustrer votre problème. Voir ma réponse par un exemple.
- C'est un programme qui marche,c'est juste pour dire que la sortie n'est pas trié, j'ai ajouté une instruction print.Aussi c'est une partie d'un vaste programme.Donc je viens de mentionner les pièces nécessaires.
- Je ne peux pas copier le code de votre question et de le compiler. Ce n'est pas un programme de travail. Voir ma réponse pour un exemple d'un programme de travail.
- Le reviews_data_map de la carte est remplie avec les valeurs de Cassandra base de données. C'est pourquoi, même si je colle le code, je pense que vous ne serez pas en mesure de compiler.
Vous devez vous connecter pour publier un commentaire.
Il semble triés pour moi:
De sortie:
ALLER 1.8 ou ci-dessus:
sort.Slice(timeSlice, func(i, j int) bool { return timeSlice[i].date.Before(timeSlice[j].date)})