如何比较scala中的两个数组?

时间:2011-03-22 15:02:07

标签: arrays scala pattern-matching

val a: Array[Int] = Array(1,2,4,5)
val b: Array[Int] = Array(1,2,4,5)
a==b // false

是否有模式匹配方式来查看两个数组(或序列)是否相同?

5 个答案:

答案 0 :(得分:95)

您需要将最后一行更改为

a.deep == b.deep

对数组进行深度比较。

答案 1 :(得分:87)

来自Programming Scala

Array(1,2,4,5).sameElements(Array(1,2,4,5))

答案 2 :(得分:18)

  a.corresponds(b){_ == _}
  

Scaladoc:true如果两个序列都有   相同的长度和p(x, y)true   对于所有相应的元素x   this包裹数组和y that,   否则false

答案 3 :(得分:5)

为获得最佳性能,您应该使用:

java.util.Arrays.equals(a, b)

这非常快,不需要额外的对象分配。 scala中的Array[T]与java中的Object[]相同。原始值的相同故事,如Int,即java int

答案 4 :(得分:2)

从Scala 2.13开始,deep相等方法无效,并且会出错:

val a: Array[Int] = Array(1,2,4,5)
val b: Array[Int] = Array(1,2,4,5)
a.deep == b.deep // error: value deep is not a member of Array[Int]

sameElements在Scala 2.13中仍然有效:

a sameElements b // true