Β map, flatMap, compactMap
Swiftμ map, flatMap, compactMap μ λͺ¨λ 컬λ μ
νμ
(ex, λ°°μ΄, λμ
λ리)μ μ¬μ©λλ κ³ μ°¨ ν¨μμ΄λ€.
μ΄ ν¨μλ€μ κ°κ°μ 컬λ μ
μμμ λν΄ νΉμ μ°μ°μ μννκ³ κ²°κ³Όλ₯Ό λ°ννλλ° μ¬μ©λλ€.
Β map
map ν¨μλ 컬λ μ
μ κ° μμμ λν΄ μ£Όμ΄μ§ ν΄λ‘μ λ₯Ό μ μ©νκ³ , κ·Έ κ²°κ³Όλ₯Ό μλ‘μ΄ μ»¬λ μ
μΌλ‘ λ°ννλ€.
β’
μ΄ ν¨μλ κ° μμλ₯Ό λ³νν λ μ¬μ©νλ€.
β’
λ³νλ κ° μμλ ν΄λ‘μ μ λ°νκ°κ³Ό λμΌν νμ
μ κ°μ§λλ€.
μμ 1)
[1, 2, 3].map { $0 * 2 }
// [2, 4, 6]
Swift
볡μ¬
μμ 2)
let numbers: [Int] = [0, 1, 2, 3, 4, 5]
print("numbers: \(numbers)")
// numbers: [0, 1, 2, 3, 4 ,5]
let mappingNumbers = numbers.map { number in
number + 1
}
print("mappingNumbers: \(mappingNumbers)")
// mappingNumbers: [1, 2, 3, 4, 5, 6]
Swift
볡μ¬
μΆμ½)
let mappingNumbers = numbers.map { "λλ \($0)λ² μ
λλ€." }
Swift
볡μ¬
Β flatMap
Β Swift 4.1 μ΄μ
β’
μ€μ²©λ 컬λ μ
(컬λ μ
μ 컬λ μ
)μ λ¨μΌ 컬λ μ
μΌλ‘ ννν(flatten) μν¨λ€.
β’
map κ³Ό μ μ¬νκ² κ° μμμ λν΄ ν΄λ‘μ λ₯Ό μ μ©νμ§λ§, ν΄λ‘μ κ° nil μ λ°νν μ μλ μ΅μ
λ νμ
μ λ°νν λ nil κ°μ κ±Έλ¬λΈλ€.
Β Swift 4.1 μ΄ν
β’
μ€μ²©λ 컬λ μ
μ ννννλ μ©λμ flatMapμ compactMapμΌλ‘ λ체λμλ€.
Β compactMap
μ€μννΈ 4.1 μ΄μμμ compactMapμ flatMapμ λ λ²μ§Έ μ¬μ© μ¬λ‘λ₯Ό λ체νλ€.
compactMap μ κ° μ»¬λ μ
μμμ λν΄ ν΄λ‘μ λ₯Ό μ μ©νκ³ , ν΄λ‘μ κ° λ°ννλ μ΅μ
λ κ° μ€μμ nil μ΄ μλ κ°μ μΆμΆνμ¬ μ 컬λ μ
μ λ§λ λ€.
β μ΄λ μ£Όλ‘ μ΅μ
λμ λ°ννλ λ³νμμ nil κ°μ μ κ±°νλ λ° μ μ©νλ€.
μμ)
["1", "two", "3"].compactMap { Int($0) }
// [1, 3]
Swift
볡μ¬
μμ 2)
let numbers: [[Int]] = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
let mapNumbers = numbers.map { $0 }
print("mapNumbers: \(mapNumbers)")
// mpaNumbers: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
let flatMapNumbers = numbers.flatMap { $0 }
print("flatMapNumbers: \(flatMapNumbers)")
// flatMapNumbers: [0, 1, 2, 3, 4, 5, 6, 7, 8]
let compactMapNumbers = numbers.compactMap { $0 }
print("compactMapNumbers: \(compactMapNumbers)")
// compactMapNumbers: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
Swift
볡μ¬
μμ 3)
let possibleNumbers = ["1", "2", "three", "///4///", "5"]
let mapped = possibleNumbers.map { str in Int(str) }
// [Optional(1), Optional(2), nil, nil, Optional(5)]
let compactMapped = possibleNumbers.compactMap { str in Int(Str) }
// [1, 2, 5]
Swift
볡μ¬
β’
map μ μ¬μ©νμ λλ optional μ΄μ§λ§,
β’
compactMap μ μ¬μ©νλ Int μ ν΄λΉνλ κ°λ§ λ€μ΄κ°λ€
β¦
κ·Έ μ΄μ λ compactMap μ΄ μ΅μ
λ λ°μΈλ©μ κΈ°λ₯μ κ°μ§κ³ μκΈ° λλ¬Έμ΄λ€.
β¦
map μ μλ κΈ°λ₯μμ μ΅μ
λ μ κ±°κΉμ§ κ°λ₯!