728x90
안녕하세요.
주로 Objective-C를 쓰다 보니... Swift의 compactMap과 flatMap이 자꾸 헷갈리더라구요..
글로 남겨두면 안 까먹겠지 싶어 map 삼총사 공부하고 정리해 보려고요ㅎㅎ
# map
Sequence의 elements들을 변환시킨 결과의 배열을 반환하는 함수.
시간복잡도는 O(n)입니다.
# compactMap
Sequence의 elements들을 변환시키고 nil이 아닌(=Optional이 아닌) 결과의 배열을 반환하는 함수.
(map 결괏값이랑 비교하면 어떤 차이인지 알겠죠?)
시간복잡도는 O(n)입니다.
# flatMap
Sequence의 elements들을 변환시키기고 single-level collection을 반환하는 함수.
여기서 single-level collection을 반환한다는 의미는, flatMap 클로저에서 sequence나 collection을 반환할 때, 이 sequence나 collection의 각 element들만 모아 하나의 배열로 반환한다는 뜻입니다.
시간복잡도는 O(n+m)입니다.
(여기서 n은 원본 sequence length이고, m은 결괏값의 length입니다.)
[참고] flatMap 클로저에서 optional 값을 반환하는 경우는 deprecated 되었으니 compactMap을 사용하세요.
flatMap 클로저에서 optional 값을 반환하는 경우, compactMap과 동일한 결괏값을 반환합니다. deprecated 되었으니 compactMap을 사용하면 좋을 것 같아요ㅎㅎ
# 정리
API | 결괏값 | 시간복잡도 |
map | elements를 변환시킨 배열 | O(n) (n: 원본 sequece의 length) |
compactMap | elements를 변환시킨 non-nil 배열 | O(n) (n: 원본 sequece의 length) |
flatMap | elements가 sequence나 collection로 변환될 경우, 내부 elements만 모은 하나의 배열을 반환 | O(n+m) (n: 원본 sequece의 length, m: 결괏값의 length) |
# 참고
이번 글은 여기서 마무리.
반응형
'Swift' 카테고리의 다른 글
JSON을 enum associated value로 Decoding 하기 (1) | 2024.09.03 |
---|---|
lazy var 클로저에서 retain cycle이 생기는 경우 (0) | 2024.06.20 |
@propertywrapper (0) | 2024.06.07 |
protocol initializer가 클래스에서 required로 정의되어야 하는 이유 (0) | 2024.05.12 |
propertyWrapper로 UserDefaults 관리 (0) | 2024.05.11 |