Comment puis-je comparer correctement deux tableaux dans Go?
Par exemple, comment puis-je comparer des tableaux bidimensionnels avec des entrées int ou tout autre type?
Quelle est la profondeur de cette comparaison?
Pour comparer deux tableaux, utilisez les opérateurs de comparaison==
ou !=
. Citant le lien:
Les valeurs de tableau sont comparables si les valeurs du type d'élément de tableau sont comparables. Deux valeurs de tableau sont égales si leurs éléments correspondants sont égaux.
Un tableau 2D (ou ND) répondant à l'exigence ci-dessus, vous pouvez le comparer de la même manière.
La question "Quelle est la profondeur de cette comparaison?" n'a pas de sens pour les tableaux.
Pour une comparaison "profonde", vous pouvez utiliser reflect.DeepEqual
.
DeepEqual teste l'égalité profonde. Il utilise l'égalité == normale dans la mesure du possible mais analysera les éléments des tableaux, des tranches, des cartes et des champs de structures. Dans les cartes, les clés sont comparées à == mais les éléments utilisent une égalité profonde. DeepEqual gère correctement les types récursifs. Les fonctions ne sont égales que si elles sont toutes deux nulles. Une tranche vide n'est pas égale à une tranche nulle.
Exemple:
package main
import (
"bytes"
"fmt"
"reflect"
)
func main() {
a := []byte{} // empty slice
b := []byte(nil) // nil slice
fmt.Printf("%t\n%t", bytes.Equal(a, b), reflect.DeepEqual(a, b))
}
Retour:
vrai
faux
La mise en garde est que c'est lent.
Si vous avez 2 int
tranches/tableaux, essayez ceci:
func IntArrayEquals(a []int, b []int) bool {
if len(a) != len(b) {
return false
}
for i, v := range a {
if v != b[i] {
return false
}
}
return true
}
REMARQUE: c'est pour les tableaux 1D, mais vous pouvez le réécrire pour 2D.