Ce face maps.Equal
Map-urile nu se pot compara cu == (doar cu nil). maps.Equal(m1, m2) returnează true dacă au aceleași chei și, pentru fiecare cheie, valori egale. Ordinea nu contează (un map nu are ordine). Un map nil și unul gol sunt egale.
maps.EqualFunc(m1, m2, eq) folosește funcția eq pentru valori. Valorile pot avea chiar tipuri diferite, de exemplu compari un map[string]int cu un map[string]string. Este util și pentru numere cu virgulă comparate cu o toleranță.
Parametri
| Parametru | Descriere |
|---|---|
m1, m2 |
Map-urile comparate. |
eq |
Pentru EqualFunc: spune dacă două valori sunt egale. |
Ce returnează
true dacă map-urile sunt egale, altfel false.
Exemple
Exemplul 1: Compararea a două inventare
package main
import (
"fmt"
"maps"
)
func main() {
luni := map[string]int{"mere": 40, "pere": 12}
marti := map[string]int{"pere": 12, "mere": 40}
miercuri := map[string]int{"mere": 38, "pere": 12}
fmt.Println(maps.Equal(luni, marti))
fmt.Println(maps.Equal(luni, miercuri))
var gol map[string]int
fmt.Println(maps.Equal(gol, map[string]int{}))
}
Rezultat
true
false
true
Exemplul 2: Egalitate cu toleranță și între tipuri diferite
package main
import (
"fmt"
"maps"
"math"
"strconv"
)
func main() {
calculat := map[string]float64{"Iași": 0.1 + 0.2, "Cluj": 1.0 / 3}
asteptat := map[string]float64{"Iași": 0.3, "Cluj": 0.3333333333}
fmt.Println(maps.Equal(calculat, asteptat))
fmt.Println(maps.EqualFunc(calculat, asteptat, func(a, b float64) bool {
return math.Abs(a-b) < 1e-9
}))
numere := map[string]int{"a": 1, "b": 2}
texte := map[string]string{"a": "1", "b": "2"}
fmt.Println(maps.EqualFunc(numere, texte, func(n int, t string) bool { return strconv.Itoa(n) == t }))
}
Rezultat
false
true
true
Greșeli frecvente
- Scrii
m1 == m2: eroare de compilare (map can only be compared to nil). - Folosești
Equalpe valorifloat64rezultate din calcule: diferențe minuscule de rotunjire fac map-urile „diferite”. FoloseșteEqualFunccu o toleranță.
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.maps.Clone: Clone face o copie a unui map; Copy copiază toate perechile din src în dst, suprascriind cheile existente.