45

如何正确比较 Go 中的两个数组?

例如,如何将二维数组与int条目或任何其他类型进行比较?

这种比较有多深?

4

3 回答 3

36

要比较两个数组,请使用比较运算符 ==!=。引用链接:

如果数组元素类型的值是可比较的,则数组值是可比较的。如果它们的对应元素相等,则两个数组值相等。

由于 2D(或 ND)阵列符合上述要求,您可以用相同的方式进行比较。

问题“这种比较有多深?” 对数组没有意义。

于 2013-09-01T18:00:28.097 回答
27

对于“深度”比较,您可以使用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))
}

回报:

真假
_

需要注意的是它很慢。

操场

于 2013-09-02T12:40:53.940 回答
9

如果您有 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
}

注意:这适用于一维数组,但您可以将其重写为二维。

于 2013-09-01T17:56:32.813 回答