问题描述
由于从Scala 2.13开始删除了.deep方法 比较两个与.deep相同工作的数组的最佳方法是什么? 示例:(在Scala 2.13之前,它的工作方式如下)
scala> Array(Array(1),2).deep == Array(Array(1),2).deep
res3: Boolean = true
一个首选的解决方案是使用sameElements方法,但是如果Array是嵌套的,则此方法不起作用。示例:
scala> Array(Array(1),2) sameElements Array(Array(1),2)
res0: Boolean = false
注意:我正在使用Scala 2.13.3
解决方法
如果您只对相等感兴趣,并且正在处理本机数组,则可以使用here中记录的java.util.Arrays.deepEquals
。
引用文档:
如果两个指定的数组深等于,则返回
true
另一个。与equals(Object[],Object[])
方法不同,此方法是 适用于任意深度的嵌套数组。如果两个数组引用均为
null
,则两个数组引用被认为是完全相等的,或者 如果它们引用包含相同数量元素的数组,并且 两个数组中所有对应的元素对都非常深 相等。如果可能存在两个可能为空的元素
e1
和e2
相等, 符合以下条件:
e1
和e2
都是对象引用类型的数组,并且Arrays.deepEquals(e1,e2)
将返回truee1
和e2
是相同原始类型的数组,并且Arrays.equals(e1,e2)
的适当重载将返回true
。e1 == e2
e1.equals(e2)
将返回true
。请注意,此定义允许
null
个元素在任何深度。如果任何一个指定数组包含自身作为元素 通过一个或多个级别的数组直接或间接地, 该方法的行为是不确定的。