Ce face slices.Equal
În Go nu poți compara două slice-uri cu == (nu compilează; slice-urile se pot compara doar cu nil). slices.Equal(s1, s2) returnează true dacă au aceeași lungime și elementele de pe aceleași poziții sunt egale. Un slice nil și unul gol sunt considerați egali.
slices.EqualFunc(s1, s2, eq) folosește funcția eq pentru fiecare pereche de elemente. Slice-urile pot avea chiar tipuri diferite: de exemplu compari un []int cu un []string.
La float64, NaN nu este egal cu el însuși, deci două slice-uri care conțin NaN nu sunt egale pentru Equal.
Parametri
| Parametru | Descriere |
|---|---|
s1, s2 |
Slice-urile comparate. |
eq |
Pentru EqualFunc: spune dacă două elemente sunt egale. |
Ce returnează
true dacă slice-urile sunt egale, altfel false.
Exemple
Exemplul 1: Compararea a două liste
package main
import (
"fmt"
"slices"
)
func main() {
a := []string{"Ana", "Mihai"}
b := []string{"Ana", "Mihai"}
c := []string{"Mihai", "Ana"}
fmt.Println(slices.Equal(a, b))
fmt.Println(slices.Equal(a, c))
var gol []int
fmt.Println(slices.Equal(gol, []int{}))
}
Rezultat
true
false
true
Exemplul 2: Egalitate fără majuscule și între tipuri diferite
package main
import (
"fmt"
"slices"
"strconv"
"strings"
)
func main() {
a := []string{"IAȘI", "Cluj"}
b := []string{"iași", "CLUJ"}
fmt.Println(slices.EqualFunc(a, b, strings.EqualFold))
numere := []int{1, 2, 3}
texte := []string{"1", "2", "3"}
fmt.Println(slices.EqualFunc(numere, texte, func(n int, t string) bool {
return strconv.Itoa(n) == t
}))
}
Rezultat
true
true
Greșeli frecvente
- Scrii
a == bpentru două slice-uri: eroare de compilare (slice can only be compared to nil). - Aștepți ca
Equalsă ignore ordinea:[Ana Mihai]și[Mihai Ana]sunt diferite. Sortează copii ale lor înainte, dacă ordinea nu contează.
Comenzi înrudite
slices.Compare: Compară două slice-uri element cu element (ca în dicționar) și returnează -1, 0 sau +1.maps.Equal: Verifică dacă două map-uri au exact aceleași chei cu aceleași valori; EqualFunc compară valorile cu o funcție proprie.slices.Sort: Sortează crescător, pe loc, un slice de orice tip ordonat (numere, texte).