scala는 groupBy api를 제공한다. 정확히 말하면, TraserableLike.groupBy을 사용할 수 있다.
println("java scala".trim.groupBy(identity))
identity는 정의된 함수를 사용하여 단어별로 groupBy를 할 수 있다.
def identity[A](x: A): A = x// @see `conforms` for the implicit version
groupBy 결과는 다음과 같다.
Map(s -> s, j -> j, a -> aaaa, -> , v -> v, l -> l, c -> c)
카운트를 계산하기 위해서는 mapValues를 이용해 본다.
println("java scala".trim.groupBy(identity).mapValues(_.size).toVector)
결과는 다음과 같다.
Vector((s,1), (j,1), (a,4), ( ,1), (v,1), (l,1), (c,1))
3 개의 값을 가진 튜플에 대해서 groupBy를 호출한다.
val list = Seq(("one", "i", "char"), ("two", "2", "num"), ("two", "ii", "char"), ("one", "1", "num"), ("four", "iv", "char"), ("five", "iv", "char"))
val v = list.groupBy(_._3)
println(v)
val values = list.groupBy(_._3).mapValues(_.map(_._2))
println(values)
첫 번째 groupBy 결과는 다음과 같다.
Map(num -> List((two,2,num), (one,1,num)), char -> List((one,i,char), (two,ii,char), (four,iv,char), (five,iv,char)))
두 번째 groupBy-mapValues 결과는 다음과 같다.
Map(num -> List(2, 1), char -> List(i, ii, iv, iv))
키 별 개수를 알고 싶다면, 다음과 같은 코드를 사용할 수 있다.
val values1 = list.groupBy(_._3).map(t => (t._1, t._2.length))
println(values1)
Map(num -> 2, char -> 4)
'scala' 카테고리의 다른 글
[scala] json 이슈 (0) | 2016.10.12 |
---|---|
[scala] filter+map을 flatMap으로 변경 예시 (0) | 2016.10.11 |
[scala] retry (0) | 2016.10.06 |
[scala] 스칼라의 HashSet (분할상환 상수 시간) (0) | 2016.10.05 |
스칼라의 대수적 자료형(Algebraic Data Types, ADT), exhaustivity-checking (0) | 2016.10.04 |