Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- val keys = List('a','b','a')
- val values = List(45,65,12)
- val finalMap:Map(char:Int) =
- scala.collection.mutable.Map().withDefaultValue(0)
- 0 until keys.length map (w => finalMap(keys(w)) += values(w))
- scala> (keys zip values) groupBy (_._1) map { case (k,v) => (k, (v map (_._2)).sum) }
- res0: scala.collection.immutable.Map[Char,Int] = Map(b -> 65, a -> 57)
- scala> keys.zip(values).groupBy(_._1).mapValues(l => l.map { v =>
- | println("OK mapping")
- | v._2
- | }.sum)
- OK mapping
- OK mapping
- OK mapping
- res2: scala.collection.immutable.Map[Char,Int] = Map(b -> 65, a -> 57)
- scala> res2('a') // recomputes
- OK mapping
- OK mapping
- res4: Int = 57
- val m = keys.zip(values).groupBy(_._1).mapValues(l => l.map(_._2).sum)
- keys.zip(values) = List((a, 45), (b, 65), (a, 12))
- keys.zip(values).groupBy(_._1) = Map((a, List((a, 45), (a, 12))), (b, List((b, 65))))
- List((a, 45), (a, 12)).map(_._2) = List(45,12)
- List(45, 12).sum = 57
- ( Map[Char,Int]() /: (keys,values).zipped ) ( (m,kv) =>
- m + ( kv._1 -> ( m.getOrElse( kv._1, 0 ) + kv._2 ) )
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement