In Go, l'ordinamento di una slice contenente struct può essere effettuato utilizzando il pacchetto sort
. Questo pacchetto fornisce la funzione sort.Slice
, che consente di definire un criterio personalizzato per l'ordinamento.
Esempio di Ordinamento
Consideriamo una struct Person
con i campi Name
e Age
. L'obiettivo è ordinare una slice di Person
in base all'età.
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
people := []Person{
{Name: "Alice", Age: 30},
{Name: "Bob", Age: 25},
{Name: "Charlie", Age: 35},
}
sort.Slice(people, func(i, j int) bool {
return people[i].Age < people[j].Age
})
fmt.Println("Slice ordinata:", people)
}
Spiegazione
sort.Slice
accetta la slice e una funzione di confronto che stabilisce l'ordine.- La funzione di confronto restituisce
true
se l'elemento in posizionei
deve precedere quello in posizionej
. - Nell'esempio, la slice viene ordinata in ordine crescente rispetto all'età.
Ordinamento Personalizzato
Se si desidera un ordinamento più complesso, è possibile implementare l'interfaccia sort.Interface
:
type ByName []Person
func (p ByName) Len() int { return len(p) }
func (p ByName) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
func (p ByName) Less(i, j int) bool { return p[i].Name < p[j].Name }
func main() {
people := []Person{
{Name: "Alice", Age: 30},
{Name: "Bob", Age: 25},
{Name: "Charlie", Age: 35},
}
sort.Sort(ByName(people))
fmt.Println("Slice ordinata per nome:", people)
}
Questo approccio è utile quando si vuole riutilizzare il criterio di ordinamento in più punti del codice.
Conclusione
Go offre metodi semplici ed efficaci per ordinare slice di struct. sort.Slice
è utile per ordinamenti rapidi e personalizzabili, mentre sort.Interface
consente una maggiore riusabilità e flessibilità.