Maison >développement back-end >Golang >Comment trier une structure Go par son champ « time.Time » ?
Tri d'une structure par champ Time.Time dans Go
Lors de la tentative de tri d'une structure par son membre de type time.Time, les utilisateurs peut rencontrer des résultats inattendus. Ce problème se produit car le package de tri par défaut ne dispose pas de fonctionnalités pour trier les valeurs time.Time.
Description du problème :
La structure fournie, reviews_data, a un membre appelé date of tapez time.Time. Les utilisateurs ont défini un type de tranche personnalisé, timeSlice, implémentant les méthodes Len, Less et Swap pour trier la tranche. Ils tentent de mapper une carte de reviews_data sur timeSlice, trient la tranche et s'attendent à ce que la carte soit triée en fonction de ses valeurs de date. Cependant, le tri ne se produit pas comme prévu.
Solution :
Pour les versions Go 1.8 et supérieures, le problème peut être résolu en utilisant plutôt la fonction sort.Slice de sorte.Trier. La nouvelle syntaxe de tri de la tranche par champ date serait :
sort.Slice(timeSlice, func(i, j int) bool { return timeSlice[i].date.Before(timeSlice[j].date) })
La fonction sort.Slice prend la tranche à trier et une fermeture définissant la fonction de comparaison. Dans ce cas, la fermeture compare les valeurs de date de deux éléments dans la tranche.
Explication :
Avant Go 1.8, la fonction sort.Sort ne pouvait être utilisé avec les types qui implémentent l'interface Sorter. Dans Go 1.8 et versions ultérieures, sort.Slice a été introduit, permettant aux utilisateurs de trier des tranches à l'aide d'une fermeture sans nécessiter l'implémentation d'un type de tri personnalisé.
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!