Sort con Funzioni
Esistono funzioni di libreria di sorting già redatte, ma solo in numerp limitato.
Chiunque può implementare il sorting solo implementando l'interfaccia sort.Interfaceche richiede la definizione delle funzioni:
Len- lunghezza dell'oggetto da sortizzareSwap- come invertire nell'ordine due oggetti da sortizzareLess- quale dei due oggetti paragonati è minore, secondo i nostri criteri di Sortizzazione
Dati due record, infatti, dipende dal modello del dominio dell'applicazione decidere in quale ordine debbano essere organizzati i record, e con quale criterio.
L'esempio seguente ordina stringhe per lunghezza.
(400sorting-by-functions.go):
// Per sortizzare stringhe per lunghezza occorre
// fornire funzioni custom
package main
import "sort"
import "fmt"
// Per compiere un sort con funzioni custom occorre un tipo
// che può essere un alias di un tipo corrente
// Una slice di stringhe
type ByLength []string
// Occorre implementare l'interfaccia sort.Interface
// per poter usare la funzione Sort
// Questa richiede la definizione delle funzioni
// Len, Swap e Less
// Len ritorna la lunghezza della stringa
func (s ByLength) Len() int {
return len(s)
}
// Swap inverte due stringhe della slice
// i e j sono gli indici
func (s ByLength) Swap(i, j int) {
// Fantastico! Il primo swap senza
// variabili d'appoggio intermedie
s[i], s[j] = s[j], s[i]
}
// Less contiene la logica
// Determina quale stringa è 'minore' ovvero viene
// prima dell'altra secondo il nostro criterio
func (s ByLength) Less(i, j int) bool {
return len(s[i]) < len(s[j])
}
func main() {
// Slice originale
fruits := []string{"peach", "banana", "kiwi"}
// Sortizzazione
sort.Sort(ByLength(fruits))
// Stampa del risultato
fmt.Println(fruits)
}