Maison > développement back-end > Golang > Comment trier les structures dans Go selon plusieurs critères (nom puis prénom) ?

Comment trier les structures dans Go selon plusieurs critères (nom puis prénom) ?

Linda Hamilton
Libérer: 2024-12-09 20:07:19
original
213 Les gens l'ont consulté

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

Tri des structures avec plusieurs critères

Dans Go, le tri d'une tranche de structures peut être réalisé en utilisant différentes approches. Cette discussion se concentre sur le tri selon plusieurs paramètres, notamment par LastName puis FirstName.

Méthode 1 : slices.SortFunc (Go 1.22)

Pour Go 1.22 et supérieur, slices.SortFunc fournit un élégant solution :

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

Méthode 2 : sort.Slice ou sort.Sort

Dans Go 1.8, sort.Slice ou sort.Sort peut être utilisé. Les deux nécessitent moins de fonction pour déterminer l’ordre. Cette fonction compare les champs LastName et FirstName :

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

Pour sort.Sort, un type personnalisé implémentant l'interface sort.Interface est nécessaire :

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

Considérations relatives aux performances

Choisissez l'approche qui correspond le mieux aux exigences de votre application. À moins que l’analyse des performances ne révèle que le tri constitue un goulot d’étranglement, la commodité doit être la priorité.

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