스칼라의 콜렉션 객체에서 foldLeft을 많이 사용한다. 왼쪽 항부터 마지막 항까지 계산되는 것을 의미한다.
리스트의 값을 왼쪽에서 오른쪽으로 계산한다. 0(초기값) + 3 + 6 + 9 = 18이 예상된다.
val list : List[Int] = List(3, 6, 9)
println(list.foldLeft(0) ((x, y) => x + y))
결과는 다음과 같다.
18
이 코드는 조금 아래처럼 잼나게 _+_로 바꿔 쓸 수 있다. 결과는 동일하다.
val list : List[Int] = List(3, 6, 9)
println(list.foldLeft(0) (_+_))
동작이 어떻게 되는 지 궁금하다면 다음처럼 디버깅하듯이 코딩할 수 있다.
val list : List[Int] = List(3, 6, 9)
println(list.foldLeft(0) { (x : Int, y : Int) => println("x:"+ x + ",y:"+ y); x + y })
결과는 다음과 같다.
x:0,y:3
x:3,y:6
x:9,y:9
18
이제, foldRight 메소드를 사용한다.
val list : List[Int] = List(3, 6, 9)
println(list.foldRight(0) ((x, y) => x - y))
결과를 0으로 생각할 수 있겠지만, 사실 결과는 6이 출력된다.
출력할 수 있도록 println을 사용해본다.
val list : List[Int] = List(3, 6, 9)
println(list.foldRight(0) { (x : Int, y : Int)
=> println("x:"+ x + ",y:"+ y); x - y })
결과는 다음과 같다. 3 - (-3) = 6 이 된다.
x:9,y:0
x:6,y:9
x:3,y:-3
6
문자열도 foldLeft도 사용할 수 있다.
val list : List[String] = List("aaa", "bbb", "ccc")
list.foldLeft("xxx") { (x : String, y : String)
=> println("x: " + x + " y: " + y) ; x + ":" + y}
출력은 다음과 같다.
x: xxx y: aaa
x: xxx:aaa y: bbb
x: xxx:aaa:bbb y: ccc
'scala' 카테고리의 다른 글
[scala] 여러 줄을 출력하기(print multi line ) (0) | 2016.09.07 |
---|---|
[scala] tuple, _1, match 예시 (0) | 2016.09.07 |
[scala] Stream 객체를 써서 List의 요소를 반복하기 (0) | 2016.09.07 |
[scala] package object 예제 (0) | 2016.09.07 |
[scala] for .. yield 예시 (0) | 2016.04.05 |