compactMap이란?
- compactMap은 배열의 각 요소를 변환하여 새로운 배열을 반환하는 함수
- 옵셔널(Optionals)을 처리하는 메서드
- 각 요소에 대해 변환 작업을 할 수 있고, 반환 결과가 nil인 경우는 배열에서 제거하고, nil이 아닌 값만 반환.
- 예를 들어, nil을 걸러내거나, 특정 조건에 맞는 값들만 추출하고 싶을 때 유용하다.
let numbers = ["1", "2", "three", "4"]
let result = numbers.compactMap { Int($0) }
// result: [1, 2, 4] // "three"는 변환할 수 없어서 제외
✅ map과 차이점
- map: 변환 후 nil을 포함한 배열 반환
- compactMap: 변환 후 nil 을 제거한 배열 반환
let numbers = ["1", "2", "삼", "4"]
let mapped = numbers.map { Int($0) }
// [Optional(1), Optional(2), nil, Optional(4)]
let compactMapped = numbers.compactMap { Int($0) }
// [1, 2, 4]
filter
- filter는 배열의 각 요소가 주어진 조건을 만족하는지 체크하고, 조건을 만족하는 요소들만 반환.
- 변환을 하지 않고 단순히 조건을 걸러내기만 하고, nil 값은 처리하지 않는다.
let numbers = ["1", "2", "three", "4"]
let result = numbers.filter { Int($0) != nil }
// result: ["1", "2", "4"] // "three"는 필터링되어 제외됨
✅ filter()는 조건에 맞는 요소만 반환한다.
- false를 반환하면 해당 요소는 제외
- true를 반환하면 해당 요소는 포함
☑️ 차이점
compactMap은 변환 작업 후 nil을 제거하고, filter는 조건을 만족하는 요소만 반환하는 점에서 다르다.
예를 들어, compactMap은 값을 변환하면서 동시에 nil을 제거하지만, filter는 nil이 들어가면 그냥 그 요소는 필터링해서 제외시킨다.
let values = ["1", "2", "invalid", "3"]
let numbers = values.compactMap { Int($0) } // [1, 2, 3]
let validStrings = values.filter { Int($0) != nil } // ["1", "2", "3"]
'Devlog👩🏻💻 > Swift' 카테고리의 다른 글
[Swift] 초기화(Initializers) (0) | 2024.03.13 |
---|---|
[Swift] Optional (3) | 2024.03.08 |
[Swift] 컬렉션 타입(Collection Type) - Dictionary, Set (2) | 2024.01.24 |
[Swift] 컬렉션 타입(Collection Type) - Array (3) | 2024.01.23 |
[Swift] String 문자열에서 Index 접근하기(String.Index) (2) | 2024.01.18 |