在scala中的数组减法数组

And*_*ndy 3 scala

我正在学习Scala的绳索,并且想知道是否有一种简单的方法来进行数组减法.

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

A: Array((1,2), (2,3), (4,1))
B: Array((1,1), (2,3))
Run Code Online (Sandbox Code Playgroud)

我想得到

A - B: Array((1,1), (4,1))
Run Code Online (Sandbox Code Playgroud)

相应的键应该减去.

任何帮助表示赞赏.提前致谢!

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

Chu*_*uck 6

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


dhg*_*dhg 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))
Run Code Online (Sandbox Code Playgroud)

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