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