检查多个数组元素,如果全部匹配,则返回true

时间:2019-05-31 18:49:14

标签: scala

我想确定数组下面的所有元素是否相互匹配:

val a = Array(1,1,1)
val b = Array(1,0,1)
val c = Array(0,1,1)

这里的输出应该是

Array(0,0,1) 

因为a(2),b(2)和c(2)的所有值均为1,但在所有情况下均为0。在Scala中有解决此问题的功能方法吗?

2 个答案:

答案 0 :(得分:9)

如果数组的大小都相同,则一种方法是transpose数组,然后使用Java的按位AND运算符&映射并reduce

val a = Array(1, 1, 1)
val b = Array(1, 0, 1)
val c = Array(0, 1, 1)

val result = Array(a, b, c).transpose.map(_.reduce(_ & _)) // Array(0, 0, 1)

答案 1 :(得分:0)

我认为对于0情况,接受的答案不起作用

val a = Array(1, 1, 1, 0)
val b = Array(1, 0, 1, 0)
val c = Array(0, 1, 1, 0)

使用这种解决方案(当然不是很好),最后一种情况也适用:

def matcher(a: List[Int],b: List[Int],c: List[Int]): List[Int] = (a,b,c) match {
  case (Nil,_,_) => Nil
  case (x::xs,y::ys,z::zs) => (if (x == y && y == z) 1 else 0) :: matcher(xs,ys,zs)
}

matcher(a.toList, b.toList, c.toList)

在此处比较2种解决方案:Scalafiddle