티스토리 뷰

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

'iOS' 카테고리의 다른 글

[iOS] class의 성능을 향상 시키는 방법  (0) 2022.05.18
[Swift] 소멸자 (Deinitialization)  (0) 2022.05.15
[iOS] SceneDelegate 란? (feat. LifeCycle)  (0) 2022.05.11
[Swift] enumerated() 메소드  (0) 2022.05.08
[iOS] MVC, MVP, MVVM 비교  (0) 2022.05.06