2017-04-24 41 views
1

如果你有兩張地圖(一張是可變的,另一張是不可變的),那麼你如何將其中一張的值與另一張的相應值相乘?你如何將一張地圖上的值與另一張地圖上的值相乘?

例如:

val testA = scala.collection.mutable.Map("£2" -> 3, "£1" -> 0, 
        "50p" -> 4, "20p" -> 0, "10p" -> 0, "5p" -> 0) 
val testB = scala.collection.immutable.Map("£2" -> 2, "£1" -> 1, 
        "50p" -> 0.5, "20p" -> 0.2, "10p" -> 0.1, "5p" -> 0.05) 

期待的結果:

val total = scala.collection.immutable.Map("£2" -> 6, "£1" -> 0, 
        "50p" -> 2, "20p" -> 0, "10p" -> 0, "5p" -> 0)` 

回答

1

可以使用map映射的每個值,以該值乘以查找結果上testB(或1.0,如果沒有找到)

testA.map { case (k, v) => (k, v * testB.getOrElse(k, 1.0)) } 
+0

非常好!非常感謝你。 –

+1

另請參閱:http://stackoverflow.com/questions/7076128/best-way-to-merge-two-maps-and-sum-the-values-of-same-key - 同樣的問題(用加法代替乘法),以及其他一些有趣的答案(特別是使用Scalaz的Semigroup) –

相關問題