3

私はScalaのロープを学んでいて、配列の減算を行う簡単な方法があるかどうか疑問に思っています。

要素が(K、V)の形式である2つの配列があるとしましょう:

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

入手したい

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

対応するキーは減算する必要があります。

どんな助けでも大歓迎です。前もって感謝します!

編集:「減算」という言葉は紛らわしいようです。私がやりたいのは、配列内の(K、V)ペアの一致するキーの値を減算することです。

4

3 に答える 3

6

これは通常、集合演算であるため、順序が重要でない場合は、集合を使用してみてください。次に、それはちょうどのようなものになりますA.toSet -- B.toSet

于 2012-04-30T05:28:58.243 に答える
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のエントリをすべて削除します。

于 2012-04-30T04:12:27.287 に答える
0

「forexpression」を使用してそれを行うことができます。

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
于 2013-05-03T11:47:49.517 に答える