티스토리 뷰
고차함수에서 피해가고 싶었던 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으로 보니 이해가 훨씬 잘되더라구요.
이렇게 또 하나 배워갑니다 🙌
'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 |
- Total
- Today
- Yesterday
- Swift inout
- swift 고차함수
- Class
- swift reduce
- Swift 내림차순
- Swift ModernRIBs
- RTCCameraVideoCapturer
- swift protocol
- Swift 프로퍼티
- 원티드 프리온보딩
- RIBs tutorial
- Swift RIBs
- Swift 프로그래머스
- Swift final
- ios
- CS 네트워크
- swift programmers
- removeLast()
- Swift
- iOS error
- Swift joined()
- swift property
- swift (programmers)
- Swift 알고리즘
- Swift Error Handling
- Swift joined
- 2023년 회고
- Swift Leetcode
- Combine: Asynchronous Programming with Swift
- Swift init
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |