Sort
Le funzioni di sortizzazione sono offerte dal package sort
.
Vi sono molte funzioni e dipendono dal tipo del dato trattato.
Sorting di slice di interi e stringhe
(390sorting.go):
package main
import "fmt"
import "sort"
func main() {
// I metodi di sort sono specifici di tipo
// Il sorting di una slice modifica la stessa slice
// non crea una copia
strs := []string{"c", "a", "b"}
sort.Strings(strs)
fmt.Println("Strings:", strs)
// Sort di interi
ints := []int{7, 2, 4}
sort.Ints(ints)
fmt.Println("Ints: ", ints)
// Verifica se una slice è già sortizzata
s := sort.IntsAreSorted(ints)
fmt.Println("Sorted: ", s)
}
Una slice è mutevole, e le funzioni di sort su slice modificano la slice stessa, non una copia.
Sorting di array di interi
Non è possibile sortizzare un array direttamente bisogna prima trasformarlo in slice.
(391-sort-array.go):
package main
import (
"fmt"
"sort"
)
func main() {
fmt.Println("--- sorting a slice ---")
// La seguente è una slice
slice := []int{7, 4, 5, 10, 1, 9, 3, 6, 8, 2}
slice1 := slice
fmt.Println("original slice: ", slice)
fmt.Println("copy of slice: ", slice1)
// Le slice si possono sortizzare direttamente\
sort.Ints(slice)
fmt.Println("sorted slice: ", slice)
fmt.Println("copy of slice: ", slice1)
fmt.Println("--- sorting an array ---")
// Questo è un array
// [...] dice di dedurne la dimensione
array := [...]int{7, 4, 5, 10, 1, 9, 3, 6, 8, 2}
array1 := array
fmt.Println("original array: ", array)
fmt.Println("copy of array: ", array1)
// Per sortizzare un array bisogna
// trasformarlo in una slice
sort.Ints(array[:])
// Il codice seguente non funziona
// sort.Ints(array)
fmt.Println("sorted array: ", array)
fmt.Println("copy of array: ", array1)
}
Come si nota una slice è gestita per riferimento, mentre un array è gestito per valore.
La stessa tecnica è da adottare anche per arrays di altri tipi dati.