Goで2つの配列を正しく比較するにはどうすればよいですか?
たとえば、2次元配列をどのように比較できますか? int エントリ、またはその他のタイプ
その比較はどれくらい深いですか?
回答:
回答№1は242つの配列を比較するには、 比較演算子 ==
または !=
。リンクから引用する:
配列要素の型の値が匹敵する場合、配列の値は比較可能です。対応する要素が等しい場合、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用に書き換えることができます。