Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
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
31
Tags
more
Archives
Today
Total
관리 메뉴

Olive Study Room

[Swift] Map VS compactMap VS flatMap 본문

Coding/iOS

[Swift] Map VS compactMap VS flatMap

Olive Dev 2021. 6. 23. 01:59

map(_:)

시퀀스의 element에 대해 주어진 클로저를 맵핑한 결과를 포함하는 배열을 리턴한다.

주로 배열의 각 요소를 특정 수에 곱하거나 더하는 클로저를 갖는다.

 

 

compactMap(_:)

이 시퀀스의 각 요소를 사용하여 지정된 변환을 호출한 결과 중 nil이 아닌 것을 포함하는 배열을 리턴한다.

적용하려는 배열의 요소 중 nil값이 있다면 map이 적용되지 않기 때문에 옵셔널바인딩해서 map으로 넘겨줄 수도 있다.

nil인 요소를 제거해준다.

let arr = [[1, 2], [3, nil], nil]

하지만 위와 같은 배열에서 요소는 [1, 2], [3, nil], nil 이렇게 총 세 가지이기 때문에

compactMap을 적용하고 출력하면  [1, 2], [3, nil]이렇게 두 요소가 출력된다.

 

 

flatMap(_:)

이 시퀀스의 각 요소를 사용하여 지정된 변환을 호출한 연결된(concatenated) 결과를 포함하는 배열을 리턴한다.

여기서 연결의 의미는 고차원의 배열을 한 차원 낮춰준다는 의미이다.

let numbers = [1, 2, 3, 4]

let mapped = numbers.map { Array(repeating: $0, count: $0) }
// [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

let flatMapped = numbers.flatMap { Array(repeating: $0, count: $0) }
// [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

공식문서에 설명한 코드. 이처럼 2차원배열을 1차원 배열로 연결해준다.

 

 

 

 

.. 추가로 compactMap이 생기면서 flatMap의 기능이 축소된 것이다.

 

 

'Coding > iOS' 카테고리의 다른 글

[Swift, iOS] Swift 개요와 개발환경  (0) 2021.10.07
[Swift] 소수점 다루기  (0) 2021.06.23
[Swift] Control Flow  (0) 2021.06.17
[Swift] 고차함수(map, filter, reduce)  (0) 2021.06.07
[Swift] components(separatedBy:) & split  (0) 2021.06.07
Comments