【发布时间】:2020-11-11 18:52:44
【问题描述】:
我在 Scala 中有两个可变映射。
val oldMap = Map(10 -> 100, 20 -> 200, 30 -> 300)
val newMap = Map(10 -> 101, 20 -> 200, 30 -> 299, 40 -> 400)
我想将newMap 合并到oldMap 以获得outputMap,如下所示,其中包含两个映射中的所有键,但值大于匹配键的值。
Map(20 -> 200, 40 -> 400, 10 -> 101, 30 -> 300)
我在下面尝试过,它可以工作,但我想知道 scala 的做法。
import scala.collection.mutable.Map
object Test extends App {
val oldMap = Map(10 -> 100, 20 -> 200, 30 -> 300)
val newMap = Map(10 -> 101, 20 -> 200, 30 -> 299, 40 -> 400)
val outputMap = mergeMap(oldMap, newMap)
println(outputMap)
def mergeMap(map1: Map[Int, Int], map2: Map[Int, Int]): Map[Int, Int] = {
val map1Keys = map2.keys
val itr = map1Keys.iterator
while (itr.hasNext)
{
val id = itr.next
if (! map1.contains(id)){ // key not present in map1, INSERT
map1(id) = map2(id)
}
else { // key present in map1, UPDATE
if (map2(id) > map1(id)){
map1(id) = map2(id)
}
}
}
map1
}
def commonMapKeys[A, B](a: Map[A, B], b: Map[A, B]): scala.collection.Set[A] = a.keySet.intersect(b.keySet)
}
【问题讨论】:
标签: scala dictionary merge scala-collections