본문 바로가기
iOS/Swift

Swift) map

by Jiseong 2022. 2. 12.

map

map은 배열 내부의 값을 하나씩 돌며 특정한 타입, 특정한 것으로mapping한다고 생각하면 간단하다.

 

그리고 그 결과를 배열의 상태로 반환한다.

let name = ["Jiseong","Allie","Asan","Zoe"]
print(name.map { $0 + " Hi" })
// print ["Jiseong Hi", "Allie Hi", "Asan Hi", "Zoe Hi"]

 

타입도 변경할 수 있다.

let number = [1, 2, 3, 4, 5]
print(number.map { Double($0) })

// print [1.0, 2.0, 3.0, 4.0, 5.0]

flatMap

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

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

flatMap은 2차원 배열을 1차원배열로 flat하게 만들어준다.

 

또한 1차원 배열 일때 nil을 제거해준다. 이는 compactMap 도 같다.

let number = [1, 2, nil, 3, 4, 5, nil, nil]
let flatMapped = number.flatMap { $0 }
// print [1, 2, 3, 4, 5]

compactMap

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

// 일반 map
let mapped: [Int?] = possibleNumbers.map { Int($0) }
// print [1, 2, nil, nil, 5]

let compactMapped: [Int] = possibleNumbers.compactMap { Int($0 }
// print [1, 2, 5]

옵셔널이 포함된 배열 에서 nil을 제거하고 옵셔널 바인딩을 한다.

etc.

하나의 배열에 2가지 이상의 고차함수를 사용할 수도 있다.

let possibleNumbers = possibleNumber
                        .flatMap{ $0 } // [nil, 1, 1, 2, 3, nil, 3, nil]
                        .compactMap{ $0 } // [1, 1, 2, 3, 3]

 

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

Swift) Protocol(1)  (0) 2022.02.13
Swift) removeAll() vs []  (0) 2022.02.13
Swift) DoubleStack - Queue  (0) 2022.02.12
Swift) TDD  (0) 2022.02.12
Swift) UIViewController Life Cycle  (0) 2022.02.12

댓글