Scala 2.13中最佳替代.deep方法

问题描述

由于从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,则两个数组引用被认为是完全相等的,或者 如果它们引用包含相同数量元素的数组,并且 两个数组中所有对应的元素对都非常深 相等。

如果可能存在两个可能为空的元素e1e2相等, 符合以下条件:

  • e1e2都是对象引用类型的数组,并且Arrays.deepEquals(e1,e2)将返回true
  • e1e2是相同原始类型的数组,并且Arrays.equals(e1,e2)的适当重载将返回true
  • e1 == e2
  • e1.equals(e2)将返回true

请注意,此定义允许null个元素在任何深度。

如果任何一个指定数组包含自身作为元素 通过一个或多个级别的数组直接或间接地, 该方法的行为是不确定的。