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.