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!