Maison > développement back-end > Golang > Comment trier les structures dans Go par plusieurs champs (nom puis prénom) ?

Comment trier les structures dans Go par plusieurs champs (nom puis prénom) ?

Patricia Arquette
Libérer: 2024-12-12 17:36:12
original
195 Les gens l'ont consulté

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

Comment trier des structures avec plusieurs paramètres

En programmation, il est souvent nécessaire de trier les données en fonction de plusieurs critères. Dans Go, cela peut être réalisé efficacement à l'aide de fonctions de tri personnalisées.

Problème :
Comment trier une tranche de structures par LastName puis FirstName ?

Solution utilisant slices.SortFunc (Go 1.22 ):

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

Cette solution utilise la fonction slices.SortFunc pour comparer les structures par leurs champs LastName et FirstName dans cet ordre.

Solution utilisant sort.Slice ou sort.Sort :

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
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

Les deux solutions comparent d'abord les champs LastName. S'ils sont égaux, ils comparent les champs Prénom. Le résultat est une tranche de membres triée selon les deux champs.

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