让一个不可变的地图
val m = (0 to 3).map {x => (x,x*10) }.toMap
m: scala.collection.immutable.Map[Int,Int] = Map(0 -> 0, 1 -> 10, 2 -> 20, 3 -> 30)
感兴趣的键集合
val k = Set(0,2)
和一个功能
def f(i:Int) = i + 1
如何将f
应用于感兴趣的键映射的地图中的值,以便生成的地图
Map(0 -> 1, 1 -> 10, 2 -> 21, 3 -> 30)
答案 0 :(得分:6)
m.transform{ (key, value) => if (k(key)) f(value) else value }
答案 1 :(得分:1)
这是我脑子里浮现的第一件事,但我很确定在Scala你可以做得更漂亮:
m.map(e => {
if(k.contains(e._1)) (e._1 -> f(e._2)) else (e._1 -> e._2)
})
答案 2 :(得分:0)
@ regis-jean-gilles使用map
和模式匹配的答案
m.map { case a @ (key, value) => if (k(key)) key -> f(value) else a }