티스토리 뷰

Swift

[스위프트] map, compactMap, flatMap 차이

Hani_Levenshtein 2021. 9. 4. 14:12

안녕하세요 Hani입니다.

이번에는 map, compactMap, flatMap의 차이에 대하여 알아볼 거예요. ☺️

 

 

map

map은 sequence의 모든 원소에 대한 변환 작업을 통해 새로운 Array을 만들어줍니다.

let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let lowercaseNames = cast.map { $0.lowercased() }
// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]
let letterCounts = cast.map { $0.count }
// 'letterCounts' == [6, 6, 3, 4]

 

 

compactMap

compactMap은 sequence의 모든 원소에 대한 변환 작업 결과 중 nil이 아닌 것만을 Array로 반환해줍니다.

let possibleNumbers = ["1", "2", "three", "///4///", "5"]

let mapped: [Int?] = possibleNumbers.map { str in Int(str) }
// [1, 2, nil, nil, 5]

let compactMapped: [Int] = possibleNumbers.compactMap { str in Int(str) }
// [1, 2, 5]

 

 

flatMap

flatMap은 sequence의 모든 원소에 대한 변환 작업을 concatenate하여 반환합니다.

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]

let flatMapped2 = Array(mapped.joined())
// [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

flatMap의 결과물은 map의 결과물을 joined한 후 Array로 변환한 것과 동일합니다.

 

 


References

https://developer.apple.com/documentation/swift/array/3017522-map

https://developer.apple.com/documentation/swift/array/2957701-compactmap

https://developer.apple.com/documentation/swift/array/3126947-flatmap

댓글