Maison >développement back-end >Golang >Comment trier correctement une structure Go par son champ time.Time ?

Comment trier correctement une structure Go par son champ time.Time ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-02 13:42:38179parcourir

How to Correctly Sort a Go Struct by its time.Time Field?

Tri d'une structure par son champ time.Time

Vous essayez de trier une structure dans Go par son champ time.Time, qui a rencontré un problème. Le fragment de code que vous avez fourni inclut une implémentation de tri personnalisée utilisant une tranche de votre structure reviews_data et une carte :

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] }

Cependant, le problème que vous avez signalé est que le résultat n'est pas trié correctement. Cela peut être dû à plusieurs raisons :

  • Algorithme incorrect : Vérifiez à nouveau votre fonction Less pour vous assurer qu'elle compare correctement le champ de date à l'aide de la méthode Before, qui détermine si le la première fois est antérieure à la seconde.
  • Implémentation de l'interface : Le type timeSlice doit implémenter entièrement l'interface de tri en fournissant toutes les méthodes nécessaires (Len, Less, Swap).
  • Accès simultané : Si vous accédez à la carte reviews_data_map simultanément lors du tri, cela peut conduire à des résultats incohérents. Utilisez des techniques de synchronisation telles que des verrous pour éviter ce scénario.

Solution améliorée (Go 1.8 et versions ultérieures) :

Utilisation de la fonction sort.Slice introduite dans Go 1.8 , vous pouvez simplifier votre code de tri :

sort.Slice(timeSlice, func(i, j int) bool {
    return timeSlice[i].date.Before(timeSlice[j].date)
})

Cette solution améliorée utilise la fonctionnalité de tri de la bibliothèque standard, garantissant un processus de tri plus fiable et efficace.

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!

Déclaration:
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