Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In Scala, apply function to values for some keys in immutable map

Let an immutable map

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)

a collection of keys of interest

val k = Set(0,2)

and a function

def f(i:Int) = i + 1

How to apply f onto the values in the map mapped by the keys of interest so that the resulting map would be

Map(0 -> 1, 1 -> 10, 2 -> 21, 3 -> 30)
like image 536
elm Avatar asked Mar 20 '23 19:03

elm


2 Answers

m.transform{ (key, value) => if (k(key)) f(value) else value }
like image 81
Régis Jean-Gilles Avatar answered Mar 22 '23 09:03

Régis Jean-Gilles


That's the first thing that popped into my mind but I am pretty sure that in Scala you could do it prettier:

m.map(e =>  {
    if(k.contains(e._1)) (e._1 -> f(e._2)) else (e._1 -> e._2)
})  
like image 27
goral Avatar answered Mar 22 '23 08:03

goral