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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-03 18:19:09266parcourir

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

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!

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