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
Patricia Arquetteoriginal
2024-12-12 17:36:12261parcourir

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),
    )
})

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

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!

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