[Swift ] 고차함수 시리즈(Higher-order-function) - Reduce

2022. 5. 23. 16:55Algorithm & DataStructure

Reduce 정의 

결합(combine) 에 가까운 기능. 

컨테이너 내부의 콘텐츠를 하나로 합하는 기능을 실행하는 고차함수.

배열이라면 배열의 모든 값을 전달인자로 전달받은 클로저의 연산 결과로 합해준다.

 

 

Reduce 형태

1. 클로저가 각 요소를 전달받아 연산한 후 값을 다음 클로저 실행을 위해 반환해 컨테이너를 순환하는 형태

(배열의 각 항목들을 재귀적으로 클로저를 적용시켜 하나의 값을 만들어 줌. )

기본형태
public func reduce<Result>(_ initialResult: Result,_ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result

2. 리듀스 메서드는 컨테이너를 순환하며 클로저가 실행되지만 클로저가 따로 결괏값을 반환하지 않는 형태

* 대신 inout 매개변수 사용해 초깃값에 직접 연산을 실행하게 됨 

public func reduce<Result>(into initialResult: Result,_ updateAccumulatingResult: (inout Result, Element) throws -> ()) rethrows -> Result

 

 

Reduce 메서드 사용
let numbers: [Int] = [10,20,30,40,50]

let sumFromThree: Int = numbers.reduce(11) {
    print("\($0) + \($1)")
    return $0 + $1
}

print(sumFromThree)

코드를 돌리면 reduce 메서드의 초깃값 11 이 $0 이 되고, 그 다음 $1 이 10 이 됨.

둘이 더해진 값에 그 다음 인덱스 값 또 더해주고 그 값 더해진 결괏값을 그 다음 $0 에 값이 담기고 연산됨을 

아래 콘솔창에 프린트된 값들로 확인할 수 있음! 

 

📌 단축 인자 이름

매개변수 이름 단축시켜주는 것

→ 첫 번째 전달인자부터 $0, $1, $2, $3,...순서로 $ 와 숫자의 조합으로 표현

단축 인자 표현을 쓰면 매개변수 및 반환 타입, 실행 코드를 구분하기 위한 키워드 in 사용할 필요 X

 

Reference 

야곰 스위프트 프로그래밍(3판) - Swift 5

swift.org