Maison >développement back-end >Golang >Comment trier correctement les structures contenant des champs « time.Time » dans Go ?

Comment trier correctement les structures contenant des champs « time.Time » dans Go ?

DDD
DDDoriginal
2024-12-02 00:34:10590parcourir

How to Correctly Sort Structs Containing `time.Time` Fields in 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!

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