在scala中的数组减法数组

时间:2012-04-30 03:54:11

标签: scala

我正在学习Scala的绳索,我想知道是否有一种简单的方法可以进行数组减法。

假设我有两个数组,其中元素的格式为(K,V):

A: Array((1,2), (2,3), (4,1))
B: Array((1,1), (2,3))

我想得到

A - B: Array((1,1), (4,1))

相应的键应该减去。

感谢任何帮助。提前谢谢!

编辑:似乎“减法”这个词令人困惑。我想要做的是减去数组中(K,V)对中匹配键的值。

3 个答案:

答案 0 :(得分:5)

如果您的意思是想要为每个匹配键从A中减去B,如果差值为0,请忽略它,然后执行以下操作:

val a = Array((1,2), (2,3), (4,1))
val b = Array((1,1), (2,3))

val bMap = b.toMap
a.map{ case (k,v) => (k, v - bMap.getOrElse(k,0)) }.filter(_._2 != 0)
// Array((1,1), (4,1))

此过程将b转换为地图以便于查找。然后我们遍历a,并为每个元素减去b对该键的值(如果不存在,则为0)。最后,我们删除结果中值为0的所有条目。

答案 1 :(得分:4)

这通常是一个设置操作,因此如果顺序不重要,您可以尝试使用集合。然后它就像A.toSet -- B.toSet

答案 2 :(得分:0)

您可以使用“for expression”:

val a = Array((1,2), (2,3), (4,1))
val b = Array((1,1), (2,3))

val bMap = b.toMap
for {
  (k, v) <- a                      // get an element from a
  nv =  v - bMap.getOrElse(k,0)    // calculate the new value
  if (nv > 0)                      // filter the 0 values
} yield (k, nv)                    // yield the updated pair