Ce face strings.Compare
strings.Compare(a, b) returnează 0 dacă a == b, -1 dacă a vine înaintea lui b și +1 dacă vine după. Este forma potrivită pentru funcțiile de comparare cerute de slices.SortFunc.
Comparația se face octet cu octet (după codurile UTF-8), nu după ordinea alfabetică românească. Literele mari vin înaintea celor mici ("Z" < "a"), iar literele cu diacritice vin după toate literele fără diacritice: „Ștefan” este după „Zoe”.
Pentru egalitate și pentru <, > poți folosi direct operatorii pe texte; dau același rezultat și sunt mai ușor de citit.
Parametri
| Parametru | Descriere |
|---|---|
a, b |
Textele comparate. |
Ce returnează
-1, 0 sau +1.
Exemple
Exemplul 1: Rezultatele posibile
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.Compare("Ana", "Ana"))
fmt.Println(strings.Compare("Ana", "Ion"))
fmt.Println(strings.Compare("Ion", "Ana"))
fmt.Println(strings.Compare("Zoe", "ana"))
fmt.Println(strings.Compare("Ștefan", "Zoe"))
}
Rezultat
0
-1
1
-1
1
Exemplul 2: Sortare cu slices.SortFunc
Ordinea este după octeți: „Ștefan” ajunge ultimul. Pentru ordinea din dicționarul românesc ai nevoie de pachetul extern golang.org/x/text/collate.
package main
import (
"fmt"
"slices"
"strings"
)
func main() {
nume := []string{"Maria", "Ștefan", "Ana", "Zoe", "Ion"}
slices.SortFunc(nume, strings.Compare)
fmt.Println(nume)
slices.SortFunc(nume, func(a, b string) int { return strings.Compare(b, a) })
fmt.Println("invers:", nume)
}
Rezultat
[Ana Ion Maria Zoe Ștefan]
invers: [Ștefan Zoe Maria Ion Ana]
Greșeli frecvente
- Crezi că sortarea cu
Compareeste alfabetică pentru limba română. Diacriticele ajung la sfârșit; foloseștegolang.org/x/text/collatepentru ordinea corectă. - Sortezi nume scrise cu litere mari și mici amestecate: „Zoe” ajunge înaintea lui „ana”, pentru că toate majusculele vin înaintea literelor mici. Compară versiunile cu litere mici sau folosește o funcție care ignoră diferența.
Comenzi înrudite
strings.EqualFold: Compară două texte fără să țină cont de litere mari și mici, corect și pentru diacritice.bytes.Equal: Equal verifică dacă două slice-uri de octeți au același conținut; Compare le ordonează și dă -1, 0 sau 1.