Olive Study Room
[Swift] Map VS compactMap VS flatMap 본문
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