Maison > développement back-end > Golang > Comment trier efficacement une tranche de structures par un membre « time.Time » dans Go ?

Comment trier efficacement une tranche de structures par un membre « time.Time » dans Go ?

Barbara Streisand
Libérer: 2024-11-30 14:45:13
original
562 Les gens l'ont consulté

How to Efficiently Sort a Slice of Structs by a `time.Time` Member in Go?

Tri d'un tableau de structure par membre Time.Time dans Go

Dans Go, le tri d'une structure de données par membre spécifique peut être effectué en utilisant tri des colis. Ceci est utile dans divers scénarios, par exemple lorsque vous souhaitez trier les éléments par ordre chronologique en fonction d'un champ de date ou d'heure.

Pour trier une tranche de structures en fonction d'un membre time.Time, vous pouvez définir un type personnalisé qui implémente l'interface sort.Interface. Ce type doit définir les méthodes suivantes :

  • Len() int : Renvoie la longueur de la tranche.
  • Less(i, j int) bool : Détermine si l'élément à l'index i est inférieur à l'élément à l'indice j.
  • Swap(i, j int) : échange les éléments aux indices i et j.

Dans le code donné, vous avez défini un type timeSlice qui implémente ces méthodes. Cependant, la méthode Less compare les pointeurs aux valeurs time.Time au lieu des valeurs réelles. Pour résoudre ce problème, vous pouvez utiliser la méthode Before de time.Time pour comparer directement les valeurs de temps :

func (p timeSlice) Less(i, j int) bool {
    return p[i].date.Before(p[j].date)
}
Copier après la connexion

Une fois que vous avez défini le type personnalisé, vous pouvez trier la tranche à l'aide de la fonction sort.Sort. Cependant, pour les versions Go 1.8 et supérieures, vous pouvez utiliser la fonction sort.Slice, qui est plus efficace et concise :

sort.Slice(timeSlice, func(i, j int) bool {
    return timeSlice[i].date.Before(timeSlice[j].date)
})
Copier après la connexion

La fonction sort.Slice prend deux arguments : la tranche à trier et un fermeture qui définit la fonction de comparaison. Dans ce cas, la fermeture renvoie vrai si l'élément à l'index i est inférieur à l'élément à l'index j, et faux sinon.

Après avoir trié la tranche, les éléments seront classés par ordre croissant en fonction de la date membre.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal