/ / Go言語の配列を比較する - 配列

Go言語配列の配列を比較するには、go

Goで2つの配列を正しく比較するにはどうすればよいですか?

たとえば、2次元配列をどのように比較できますか? int エントリ、またはその他のタイプ

その比較はどれくらい深いですか?

回答:

回答№1は24

2つの配列を比較するには、 比較演算子 == または !=。リンクから引用する:

配列要素の型の値が匹敵する場合、配列の値は比較可能です。対応する要素が等しい場合、2つの配列値は等しいです。

2D(またはND)配列が上記の要件に適合するので、同じ方法でそれを比較することができます。

質問 "その比較はどれくらい深いですか?" 配列に対しては意味がありません。


回答№2の14

「深い」比較の場合は、 reflect.DeepEqual.

DeepEqualは深い平等をテストします。 可能であれば通常の==等値を使用しますが、配列、スライス、マップ、および構造体のフィールドの要素をスキャンします。マップでは、キーは==と比較されますが、要素は深い等価性を使用します。 DeepEqualは再帰型を正しく処理します。関数が両方ともnilである場合に限り、関数は等価です。空のスライスは、ゼロスライスと等しくありません。

例:

package main

import (
"bytes"
"fmt"
"reflect"
)

func main() {
a := []byte{}    // empty slice
b := []byte(nil) // nil slice
fmt.Printf("%tn%t", bytes.Equal(a, b), reflect.DeepEqual(a, b))
}

戻り値:

真実

警告はそれが遅いということです。

遊び場


回答№3の4

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
}

注意: これは1D配列用ですが、2D用に書き換えることができます。