Ce face slices.Sort
slices.Sort(x) sortează slice-ul x în ordine crescătoare, modificându-l. Merge pentru orice tip din cmp.Ordered: toate tipurile de întregi, float32, float64, string și tipurile proprii definite peste ele.
Este înlocuitorul modern pentru sort.Ints, sort.Strings și sort.Float64s. Pentru ordine descrescătoare sortezi și apoi apelezi slices.Reverse, sau folosești slices.SortFunc cu o funcție de comparare inversată.
La numere cu virgulă, valorile NaN sunt puse la început. Textele sunt comparate octet cu octet.
Parametri
| Parametru | Descriere |
|---|---|
x |
Slice-ul de sortat. |
Ce returnează
Nimic; slice-ul este sortat pe loc.
Exemple
Exemplul 1: Numere, texte și ordine descrescătoare
package main
import (
"fmt"
"slices"
)
func main() {
temperaturi := []float64{12.5, -3, 8.25, 0, 21}
slices.Sort(temperaturi)
fmt.Println(temperaturi)
nume := []string{"Mihai", "Ana", "Ioana", "Bogdan"}
slices.Sort(nume)
fmt.Println(nume)
note := []int{7, 10, 5, 9}
slices.Sort(note)
slices.Reverse(note)
fmt.Println(note)
}
Rezultat
[-3 0 8.25 12.5 21]
[Ana Bogdan Ioana Mihai]
[10 9 7 5]
Exemplul 2: Sortarea unei copii, nu a originalului
Sort modifică slice-ul primit. Dacă vrei să păstrezi ordinea inițială, sortează o copie făcută cu slices.Clone.
package main
import (
"fmt"
"slices"
)
func main() {
sosiri := []string{"Radu", "Ana", "Elena"}
alfabetic := slices.Clone(sosiri)
slices.Sort(alfabetic)
fmt.Println("Ordinea sosirii:", sosiri)
fmt.Println("Alfabetic: ", alfabetic)
}
Rezultat
Ordinea sosirii: [Radu Ana Elena]
Alfabetic: [Ana Elena Radu]
Greșeli frecvente
- Te aștepți ca
slices.Sortsă returneze slice-ul sortat: nu returnează nimic. Pentru un slice nou sortat dintr-un iterator existăslices.Sorted. - Sortezi un slice primit ca parametru și strici datele apelantului: slice-urile împart memoria, deci sortează o copie dacă nu ai voie să-l modifici.
Comenzi înrudite
slices.SortFunc: Sortează un slice după o funcție de comparare care returnează negativ, zero sau pozitiv; SortStableFunc păstrează ordinea celor egali.slices.IsSorted: Verifică dacă un slice este sortat crescător; IsSortedFunc folosește o funcție de comparare proprie.slices.Sorted: Strânge valorile unui iterator într-un slice nou și îl sortează: Sorted (ordine naturală), SortedFunc și SortedStableFunc (comparație proprie).sort.Ints: Sortează crescător, pe loc, un []int, []string sau []float64; IntsAreSorted verifică dacă un []int este deja sortat.slices.Reverse: Inversează ordinea elementelor unui slice, pe loc.