Maison >développement back-end >Golang >Comment trier les structures dans Go par plusieurs paramètres (LastName puis FirstName) ?
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.
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), ) })
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 })
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))
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!