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