Ce face slices.Compare
slices.Compare(s1, s2) compară slice-urile în ordine lexicografică, ca la cuvintele dintr-un dicționar: se uită la primele elemente diferite și decide după ele. Dacă un slice este începutul celuilalt, cel mai scurt este mai mic. Rezultatul este -1 (s1 < s2), 0 (egale) sau +1 (s1 > s2).
slices.CompareFunc(s1, s2, cmp) folosește funcția cmp pentru elemente. Ambele sunt utile când sortezi slice-uri de slice-uri, de exemplu versiuni de forma [1 22 3].
Parametri
| Parametru | Descriere |
|---|---|
s1, s2 |
Slice-urile comparate. |
cmp |
Pentru CompareFunc: compară două elemente (negativ, 0, pozitiv). |
Ce returnează
-1, 0 sau +1 (la CompareFunc, primul rezultat nenul al lui cmp).
Exemple
Exemplul 1: Ordine lexicografică
package main
import (
"fmt"
"slices"
)
func main() {
fmt.Println(slices.Compare([]int{1, 2, 3}, []int{1, 2, 4}))
fmt.Println(slices.Compare([]int{1, 2, 3}, []int{1, 2, 3}))
fmt.Println(slices.Compare([]int{1, 3}, []int{1, 2, 9}))
fmt.Println(slices.Compare([]int{1, 2}, []int{1, 2, 0}))
}
Rezultat
-1
0
1
-1
Exemplul 2: Sortarea versiunilor
Ca texte, "1.10" ar veni înaintea lui "1.9". Ca slice-uri de numere, ordinea este corectă.
package main
import (
"fmt"
"slices"
)
func main() {
versiuni := [][]int{{1, 10, 0}, {1, 9, 2}, {2, 0, 0}, {1, 9, 10}}
slices.SortFunc(versiuni, slices.Compare)
fmt.Println(versiuni)
}
Rezultat
[[1 9 2] [1 9 10] [1 10 0] [2 0 0]]
Greșeli frecvente
- Aștepți ca slice-ul mai lung să fie mereu mai mare: se compară întâi elementele, iar lungimea decide doar când unul este începutul celuilalt.
Comenzi înrudite
slices.Equal: Verifică dacă două slice-uri au aceeași lungime și aceleași elemente, în aceeași ordine; EqualFunc compară cu o funcție proprie.cmp.Compare: Compare returnează -1, 0 sau +1 după cum x este mai mic, egal sau mai mare decât y; Less spune dacă x < y.slices.SortFunc: Sortează un slice după o funcție de comparare care returnează negativ, zero sau pozitiv; SortStableFunc păstrează ordinea celor egali.