Maison >développement back-end >Golang >Comment trier les structures dans Go par plusieurs paramètres (LastName puis FirstName) ?

Comment trier les structures dans Go par plusieurs paramètres (LastName puis FirstName) ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-16 17:34:14565parcourir

How to Sort Structs in Go by Multiple Parameters (LastName then FirstName)?

Tri des structures avec plusieurs paramètres de tri

Lorsque vous travaillez avec des tableaux ou des tranches de structures, les trier selon plusieurs paramètres peut être une exigence courante. Ce guide explore différentes approches de tri des structures en fonction de plusieurs paramètres, en se concentrant sur le besoin spécifique de trier à la fois par LastName et FirstName.

Utilisation de slices.SortFunc pour un tri concis

Dans Go 1.22 et versions ultérieures , la fonction slices.SortFunc offre une solution concise et lisible pour trier les tranches. Il prend comme argument une fonction de comparaison personnalisée, vous permettant de définir les critères de tri. Pour trier par Nom puis Prénom, vous pouvez utiliser les fonctions cmp.Or et cmp.Compare :

slices.SortFunc(members, func(a, b Member) int {
    return cmp.Or(
        cmp.Compare(a.LastName, b.LastName),
        cmp.Compare(a.FirstName, b.FirstName),
    )
})

Exploiter sort.Slice pour un tri plus simple

La fonction sort.Slice fournit un moyen simple de trier les tranches. Il prend une tranche et une fonction de comparaison comme arguments. La fonction de comparaison doit renvoyer vrai si son premier argument est inférieur à son deuxième argument, et faux dans le cas contraire. Pour trier par LastName puis FirstName, vous pouvez créer la fonction de comparaison suivante :

sort.Slice(members, func(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
})

Utiliser sort.Sort pour plus de flexibilité

Une autre approche consiste à utiliser la fonction sort.Sort, qui prend une valeur qui implémente l'interface sort.Interface. Cette interface nécessite trois méthodes : Len(), Swap() et Less(). La méthode Less() est la même que la fonction de comparaison utilisée dans les approches précédentes.

type byLastFirst []Member

func (members byLastFirst) Len() int           { return len(members) }
func (members byLastFirst) Swap(i, j int)      { members[i], members[j] = members[j], members[i] }
func (members byLastFirst) Less(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
}

sort.Sort(byLastFirst(members))

Choisir la bonne approche

La meilleure approche dépend de votre application spécifique et de vos exigences de performances. À moins que les performances ne soient un facteur critique, il est recommandé de choisir l’approche la plus pratique en fonction de la lisibilité et de la maintenance.

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