【发布时间】:2020-12-20 12:18:05
【问题描述】:
因为 .deep 方法自 Scala 2.13 起已被删除 比较两个与 .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
【问题讨论】:
-
不要使用
Array? -
除非你有充分的理由 - 1) 使用
List或Vector或任何其他不可变集合,2) 不要创建将某些东西解析为Any的东西(ADT?)。那你就免费平等了。 -
我需要一个仅使用数组的解决方案。
-
您需要使用
while循环和isInstanceOf检查来实现自己的比较功能。 - 使用 Arrays 的唯一原因是原始性能,deep非常慢,因此没有意义。为什么需要数组?此外,由于它们是嵌套的,它们都是Array[Any],这是非常无用且不习惯的。 - 如果你反对语言,语言就会反对你。修复你的设计会更好,这样这个问题就会自行解决。
标签: arrays scala scala-collections