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
Libérer: 2024-12-16 17:34:14
original
562 Les gens l'ont consulté

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),
    )
})
Copier après la connexion

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
})
Copier après la connexion

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))
Copier après la connexion

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!

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