Advertisement
Guest User

Untitled

a guest
Apr 16th, 2014
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. val keys = List('a','b','a')
  2. val values = List(45,65,12)
  3. val finalMap:Map(char:Int) =
  4. scala.collection.mutable.Map().withDefaultValue(0)
  5. 0 until keys.length map (w => finalMap(keys(w)) += values(w))
  6.  
  7. scala> (keys zip values) groupBy (_._1) map { case (k,v) => (k, (v map (_._2)).sum) }
  8. res0: scala.collection.immutable.Map[Char,Int] = Map(b -> 65, a -> 57)
  9.  
  10. scala> keys.zip(values).groupBy(_._1).mapValues(l => l.map { v =>
  11. | println("OK mapping")
  12. | v._2
  13. | }.sum)
  14. OK mapping
  15. OK mapping
  16. OK mapping
  17. res2: scala.collection.immutable.Map[Char,Int] = Map(b -> 65, a -> 57)
  18.  
  19. scala> res2('a') // recomputes
  20. OK mapping
  21. OK mapping
  22. res4: Int = 57
  23.  
  24. val m = keys.zip(values).groupBy(_._1).mapValues(l => l.map(_._2).sum)
  25.  
  26. keys.zip(values) = List((a, 45), (b, 65), (a, 12))
  27.  
  28. keys.zip(values).groupBy(_._1) = Map((a, List((a, 45), (a, 12))), (b, List((b, 65))))
  29.  
  30. List((a, 45), (a, 12)).map(_._2) = List(45,12)
  31.  
  32. List(45, 12).sum = 57
  33.  
  34. ( Map[Char,Int]() /: (keys,values).zipped ) ( (m,kv) =>
  35. m + ( kv._1 -> ( m.getOrElse( kv._1, 0 ) + kv._2 ) )
  36. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement