iOS
[Swift] 고차함수 - reduce
Peppo
2022. 5. 13. 11:03
728x90
고차함수에서 피해가고 싶었던 reduce ...
요즘 알고리즘 문제를 풀면서 모르면 안되겠다는 생각이 들어
한번 파보려고 합니다. 👊
공식문서
컨테이너의 요소들을 결합한 결과를 반환합니다.
예제를 통해서 보시죠!!
예제 1
let numbers: [Int] = [1, 2, 3, 4]
var sum = numbers.reduce(initialResult: Result>, <nextPartialResult: (Result, Int) throws -> Result(Result, Int) throws -> Result(_ partialResult: Result, Int) throws -> Result)
먼저 initialResult, nextPartialResult 부분을 볼게요.
initialResult: 결합을 시작하기전 초기 값을 지정 합니다.
nextPartialResult: 요소의 값을 초기값 부터 순서대로 결합 합니다.
이렇게 사용할 수 있습니다.
let numbers: [Int] = [1, 2, 3, 4]
var sum = numbers.reduce(0) { lhs, rhs in lhs + rhs }
print(sum) // 10
lhs, rhs은 타입추론이 가능 하므로 생략 가능합니다.
var sum = numbers.reduce(0) { $0 + $1 }
reduce(0) 부분은 초기값을 지정하는거에요. 즉, 여기서의 초기값은 0 이 되는거죠!
그리고 후행클로저로 되어있는 { $0 + $1 } 부분은 nextPartialResult에 해당이 됩니다.
reduce가 구현되는 순서를 볼게요
{0 + 1} → {1 + 2} → {3 + 3} → {6 + 4} 이런식으로 요소들의 마지막까지 결합을 한뒤 return을 합니다.
마지막 값은 10이 되는거죠.
예제를 하나 더 볼게요.
예제 2
let x: [String] = ["a", "가", "나", "b", "굿굿", "peppo"]
var sum = x.reduce("result = ") { $0 + $1 }
print(sum) // result = a가나b굿굿peppo
String으로 된 배열이 있습니다.
reduce 부분에서 초기값을 "result = " 으로 줬네요.
그럼 "result = " 부터 시작해서 순서대로 결합이 되겠죠? 순서는 아래와 같습니다.
{"result = " + "a"} → {"result = a" + "가"} → ... {"result = a가나b굿굿" + "peppo"} 가 되겠네요!
오늘은 reduce에 대해 알아봤는데요 !
처음에 Int로 숫자가 더해지는거에 원리를 잘몰랐는데
String으로 보니 이해가 훨씬 잘되더라구요.
이렇게 또 하나 배워갑니다 🙌
728x90