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 |
댓글