Scala: Array の内容を比較する方法
Scala における Array の実装は Java の配列である。
["collections"] - 配列 - Scala Documentation
そのため List などと異なって(*1)、Array どうしを比較した場合、内容が同じでも true が返ることはない。
Array の equals() メソッドが単純な参照の比較しかしないからだ。
scala> val a = Array(1,2,3) a: Array[Int] = Array(1, 2, 3) scala> val b = Array(1,2,3) b: Array[Int] = Array(1, 2, 3) scala> a == b res0: Boolean = false scala> a equals b res1: Boolean = false scala> a eq b res2: Boolean = false
内容の比較を行う際には、以下のように sameElements() を利用するのが最善とされている。
scala> a sameElements b res3: Boolean = true
deep どうしを比較したり、corresponds を使ったりしても同じことが実現できる。
scala> a.deep == b.deep res4: Boolean = true scala> a.corresponds(b)(_ == _) res5: Boolean = true
*1: GenSeqLike.scala で equals メソッドがオーバーライドされている。
0 件のコメント:
コメントを投稿