튜플

2013-10-10 3 views
0
내가 키

튜플

List((1, 11), (2, 21), (1, 13), (1, 14), (2, 25)) 

하여이 목록의 값을 결합하고,이 같은 목록을 가져올

의 목록 결합 :

List((1, List(11, 13, 14)), (2, List(21, 25))) 

그때 ㄱ GROUPBY 및 사용하여 생각하고를 각 요소에 대해 reduceLeft가 있지만 더 쉽고 직접적인 방법이 있다고 생각합니까?

답변

5
scala> val l = List((1, 11), (2, 21), (1, 13), (1, 14), (2, 25)) 
l: List[(Int, Int)] = List((1,11), (2,21), (1,13), (1,14), (2,25)) 


scala> l.groupBy(_._1).toList.map(xs => (xs._1, xs._2.map(t => t._2))) 
res0: List[(Int, List[Int])] = List((2,List(21, 25)), (1,List(11, 13, 14))) 
2

이 @Brians 솔루션과 비슷하지만 패턴 매칭 사용

xs.groupBy(_._1).map { case (k, v) => (k, v.map(_._2))} 

: 당신이지도로 확인하는 경우

scala> val xs = List((1, 11), (2, 21), (1, 13), (1, 14), (2, 25)) 
l: List[(Int, Int)] = List((1,11), (2,21), (1,13), (1,14), (2,25)) 

xs.groupBy(_._1).toList.map { case (k, v) => (k, v.map(_._2)) } 
res13: List[(Int, List[Int])] = List((1,List(11, 13, 14)), (2,List(21, 25))) 

이 결과 유형으로 당신이 그것을 조금을 단축 할 수 있습니다 또는 :

xs.groupBy(_._1).map { t => (t._1, t._2.map(_._2))}