如何正确比较 Go 中的两个数组?
例如,如何将二维数组与int条目或任何其他类型进行比较?
这种比较有多深?
要比较两个数组,请使用比较运算符 ==
或!=
。引用链接:
如果数组元素类型的值是可比较的,则数组值是可比较的。如果它们的对应元素相等,则两个数组值相等。
由于 2D(或 ND)阵列符合上述要求,您可以用相同的方式进行比较。
问题“这种比较有多深?” 对数组没有意义。
对于“深度”比较,您可以使用reflect.DeepEqual
.
DeepEqual 测试深度相等。它在可能的情况下使用普通 == 相等,但会扫描数组、切片、映射和结构字段的元素。在地图中,键与 == 进行比较,但元素使用深度相等。DeepEqual 正确处理递归类型。只有当它们都为 nil 时,函数才相等。空切片不等于零切片。
例子:
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))
}
回报:
真假
_
需要注意的是它很慢。
如果您有 2 个int
切片/数组,请尝试以下操作:
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
}
注意:这适用于一维数组,但您可以将其重写为二维。