상세 컨텐츠

본문 제목

Swift언어08 - 맵.필터.리듀스

Swift언어

by 앱등개발자IOS 2022. 10. 5. 19:12

본문

# Swift는 함수를 일급객체로 취급한다.

# 함수를 전달인자로 사용할 수 있다. 

# 매개변수로 함수를 갖는 함수를 "고차함수"라고 하는데, Swift의 map, filter, reduce가 대표적이다.

1. map

map은

Swift의 "Sequence, Collection" 프로토콜을 따르는 타입&옵셔널은 모두 map을 사용할 수 있다.

map은 기존 데이터를 변형하는데 많이 사용한다. ( 기존 컨테이너 값을 변형시키지 않음!! )

예시

## map은 for-in의 반복문과 결과는 같을 수 있으나,

1. 코드가 간결해지고,

2. 빈 배열을 미리 선언하는 일도 없어지며,

3. 배열에 하나씩 append하는 시간도 줄어듦

 

아래와 같이 매우 simple하게도 처리가 가능하다.

# 다양한 컨테이너에서 map의 활용 

-   set에서 map을 사용했을 경우

    => return타입은 Array이다.

- Dictionary에서의 map사용

    => map에 (key, value)의 tuple형태로 전달된다

    => return 타입은 Array!!

 

2. filter

filter

말 그대로 "컨테이너 내부 값을 걸러서 추출해주는 고차함수"

map과 마찬가지로, 원본을 변형하지 않고, 새로운 컨테이너를 반환해줌 

 

## 매개변수로 전달되는 함수의 반환타입은 Bool이어야 한다.

    -> 해당 조건을 만족하는 element들filtering되어 새로운 컨테이너에 담겨 반환되게 된다.

2-2. 고차함수를 Chain처럼 연결하여 사용!

map과 filter를 아래와 같이 chain처럼 연결하여 사용할 수 있다!

 

3. reduce ( 역할로 보면 Combine이라고 불려야 마땅한 기능이다! )

reduce는

Swift의 " reduce"는 두가지가  있다.

 

첫 번쨰 reduce 함수

- initialResult 매개변수를 통해 초기값 지정

- nextPartialResult를 통해 클로저를 전달받고, 첫 번째 매개변수는 초기값 또는 이전 클로저의 결과값

- nextPartialResult의 두 번째 매개변수는 순환하는 컨테이너의 요소이다.

두 번째 reduce함수는 

- 클로저가 따로 결괏값을 반환하지 않고 Inout매개변수에 직접 연산하여 실행하게 됨

- updateAccumulatingResult의 첫 매개변수에, 앞쪽의 into 매개변수를 전달받고, 

- updateAccumulatingResult의 두 번째 매개변수가 컨테이너 요소를 순환하며 연산 진행

 

reduce활용 예1

reduce활용 예2

 

관련글 더보기