Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2014
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. l1 = List((1,"a"),(3,"b"))
  2. l2 = List((3,"a"),(4,"c"))
  3.  
  4. l3 = List((4,"a"),(3,"b"),(4,"c"))
  5.  
  6. val l = l1 ::: l2
  7. val m = Map[String, Int]()
  8. (m /: l) {
  9. case (map, (i, s)) => { map.updated(s, i + (map.get(s) getOrElse 0))}
  10. }.toList // Note: Tuples are reversed.
  11.  
  12. (l1 ++ l2).groupBy(_._2).mapValues(_.unzip._1.sum).toList.map(_.swap)
  13.  
  14. scala> l1 ++ l2
  15. res0: List[(Int, java.lang.String)] = List((1,a), (3,b), (3,a), (4,c))
  16.  
  17. scala> res0.groupBy(_._2)
  18. res1: ... = Map(c -> List((4,c)), a -> List((1,a), (3,a)), b -> List((3,b)))
  19.  
  20. scala> res1.mapValues(_.unzip)
  21. res2: ... = Map(c -> (List(4),List(c)), a -> (List(1, 3),List(a, a)), b -> (List(3),List(b)))
  22.  
  23. scala> res1.mapValues(_.unzip._1)
  24. res3: ... = Map(c -> List(4), a -> List(1, 3), b -> List(3))
  25.  
  26. scala> res1.mapValues(_.unzip._1.sum)
  27. res4: ... = Map(c -> 4, a -> 4, b -> 3)
  28.  
  29. scala> res4.toList
  30. res5: List[(java.lang.String, Int)] = List((c,4), (a,4), (b,3))
  31.  
  32. scala> res5.map(_.swap)
  33. res6: List[(Int, java.lang.String)] = List((4,c), (4,a), (3,b))
  34.  
  35. import scalaz._
  36. import Scalaz._
  37.  
  38. val l3 = (l1.map(_.swap).toMap |+| l2.map(_.swap).toMap) toList
  39.  
  40. for ( (k,v) <- (l1++l2).groupBy(_._2).toList ) yield ( v.map(_._1).sum, k )
  41.  
  42. val l3 = (l1 zip l2).foldRight(List[(Int, String)]()) {
  43. case ((firstPair @ (firstNumber, firstWord),
  44. secondPair @ (secondNumber, secondWord)),
  45. result) =>
  46. if (firstWord == secondWord)
  47. ((firstNumber + secondNumber), firstWord) :: result
  48. else
  49. firstPair :: secondPair :: result
  50. }
  51.  
  52. val lst = l1 ++ l2
  53. lst.map(_._2).distinct.map(i => (lst.filter(_._2 == i).map(_._1).sum, i))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement