我想确定数组下面的所有元素是否相互匹配:
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中有解决此问题的功能方法吗?
答案 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