scala
[scala] foldLeft, fodRight, reduceLeft, reduceRight, scanLeft, scanRight 함수 예제
'김용환'
2017. 7. 24. 16:43
스칼라의 콜렉션의 fold와 reduce와 scan 함수는 시간이 조금만 지나면 혼동되기 쉬운 것 같다.
accumulate 기능이 있어서 서로 비슷하게 생겼다..
List(1,2,3).foldLeft(100)((s,x) => s - x)
((100 - 1) - 2) -3 = 94
List(1,2,3).foldRight(100)((s,x) => s - x)
1 - (2 - (3 - 100)) = -98
List(1,2,3).reduceLeft((s,x) => s - x)
(1 - 2) - 3 = -4
List(1,2,3).reduceRight((s,x) => s - x)
1 - ( 2 - 3) = 2
List(1,2,3).scanLeft(100)((s, x) => s - x)
List(100, 100-1, (100-1)-2, (100-1)-2-3)
=> List(100, 99, 97, 94)
List(1,2,3).scanRight(100)((s, x) => s - x)
// index3 : 초기값 100
// index2 : 3 - 100 = -97
// index1 : 2 - -97 = 99
// index0 : 1 - 99 = -98
List(-98, 99, -97, 100)