Maison >développement back-end >Golang >Comment trier correctement les structures contenant des champs « time.Time » dans Go ?
Tri des structures par Time.Time dans Go
Tri des structures en fonction des champs membres de type time.Time peut être une tâche courante dans Go programmation. Pour comprendre la solution, examinons le problème :
Problème :
Lors de la tentative de tri d'une structure avec un membre time.Time appelé date, à l'aide de fonctions de tri personnalisées , la liste résultante n'est pas triée.
Tri personnalisé Fonctions :
Vous avez fourni les fonctions de tri personnalisées suivantes :
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] }
Ces fonctions définissent un type personnalisé timeSlice qui implémente l'interface sort.Interface, requise pour le tri dans Go.
Tri des cartes :
Vous aviez pour objectif de trier une carte de type map[string]reviews_data par le champ de date de ses valeurs. Voici votre code de tri :
//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)
Solution :
Le problème vient de l'appel incorrect à sort.Sort. Pour les versions Go 1.8 et supérieures, la méthode recommandée pour trier une tranche est d'utiliser sort.Slice :
sort.Slice(date_sorted_reviews, func(i, j int) bool { return date_sorted_reviews[i].date.Before(date_sorted_reviews[j].date) })
Cette syntaxe définit explicitement la tranche à trier et la fonction de tri. L'utilisation de ce code mis à jour triera correctement vos structures par leur champ de date.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!