Ce face slices.Sorted
slices.Sorted(seq) este Collect urmat de Sort: primești un slice nou, sortat crescător. Cea mai folosită formă este slices.Sorted(maps.Keys(m)), care dă cheile unui map în ordine, ca să le parcurgi sau afișezi mereu la fel.
slices.SortedFunc(seq, cmp) sortează după o funcție de comparare (negativ, 0, pozitiv). slices.SortedStableFunc păstrează ordinea din iterator pentru elementele egale.
Spre deosebire de slices.Sort, aceste funcții nu modifică nimic: creează mereu un slice nou.
Parametri
| Parametru | Descriere |
|---|---|
seq |
Iteratorul ale cărui valori le sortezi. |
cmp |
Pentru variantele Func: funcția de comparare. |
Ce returnează
Un slice nou, sortat.
Exemple
Exemplul 1: Parcurgerea unui map în ordinea cheilor
package main
import (
"fmt"
"maps"
"slices"
)
func main() {
populatie := map[string]int{"Iași": 271692, "Cluj-Napoca": 286598, "Brașov": 237589, "Arad": 145078}
for _, oras := range slices.Sorted(maps.Keys(populatie)) {
fmt.Printf("%-12s %d\n", oras, populatie[oras])
}
}
Rezultat
Arad 145078
Brașov 237589
Cluj-Napoca 286598
Iași 271692
Exemplul 2: Valori sortate descrescător și sortare stabilă
SortedStableFunc sortează după lungimea cuvântului; cuvintele de aceeași lungime rămân în ordinea din slice.
package main
import (
"cmp"
"fmt"
"maps"
"slices"
)
func main() {
note := map[string]int{"Ana": 9, "Mihai": 7, "Ioana": 10}
desc := slices.SortedFunc(maps.Values(note), func(a, b int) int { return cmp.Compare(b, a) })
fmt.Println(desc)
cuvinte := []string{"mere", "kiwi", "pere", "ananas", "fig"}
dupaLungime := slices.SortedStableFunc(slices.Values(cuvinte), func(a, b string) int {
return cmp.Compare(len(a), len(b))
})
fmt.Println(dupaLungime)
}
Rezultat
[10 9 7]
[fig mere kiwi pere ananas]
Greșeli frecvente
- Dai un slice direct:
slices.Sorted(s)nu compilează, funcția cere un iterator. Pentru un slice scrieslices.Sorted(slices.Values(s))sau sortează o copie cuslices.Sort.
Comenzi înrudite
slices.Collect: Collect strânge valorile unui iterator într-un slice nou; AppendSeq le adaugă la finalul unui slice existent.slices.Sort: Sortează crescător, pe loc, un slice de orice tip ordonat (numere, texte).slices.SortFunc: Sortează un slice după o funcție de comparare care returnează negativ, zero sau pozitiv; SortStableFunc păstrează ordinea celor egali.maps.Keys: Returnează un iterator peste cheile (Keys) sau valorile (Values) unui map, în ordine aleatorie.