μλ νμΈμ μ μΈμ λλ€!
μ€λμ Swiftμ κ³ μ°¨ν¨μ λν΄ μμλ³΄λ €κ³ ν©λλ€.
Swiftμ μ¬λ¬κ°μ§ κ³ μ°¨ν¨μ μ€ κ°μ₯ μμ£Ό μ°μ΄κ³ , μκ³ λ¦¬μ¦ λ¬Έμ νμ΄ μμλ μ μ©νκ² μ¬μ©λλ
map, filter, reduce μ μΈκ°μ§ ν¨μμ λν΄ μ 리ν΄λ³΄λλ‘ νκ² μ΅λλ€!
κ³ μ°¨ν¨μλ?
κ³ μ°¨ν¨μλ λ€λ₯Έν¨μλ₯Ό μ λ¬μΈμλ‘ λ°κ±°λ ν¨μλ₯Ό κ²°κ³Όλ‘ λ°ννλ ν¨μλ₯Ό λ§ν©λλ€.
(Swiftλ ν¨μλ₯Ό μΌκΈ κ°μ²΄λ‘ μ·¨κΈνκΈ° λλ¬Έμ ν¨μλ₯Ό λ€λ₯Έ ν¨μμ μ λ¬μΈμλ‘ μ¬μ©νκ±°λ ν¨μλ₯Ό κ²°κ³Όλ‘ λ°ννλ κ²μ΄ κ°λ₯ν©λλ€!)
κ³ μ°¨ν¨μμ μ’ λ₯λ‘λ map, filter, reduce, forEach, compactMap, flatMap λ±μ΄ μμ΅λλ€.
μ΄ μ€μμ κ°μ₯ λνμ μΌλ‘ λ§μ΄ μ¬μ©λλ map, filter, reduceμ λν΄ μμΈν μμλ΄ μλ€!
map
mapμ μμ μ νΈμΆν λ 맀κ°λ³μλ‘ μ λ¬λ ν¨μλ₯Ό μ€ννμ¬ κ·Έ κ²°κ³Όλ₯Ό λ€μ λ°νν΄μ£Όλ ν¨μμ λλ€.
μ’ λ νμ΄μ μ€λͺ νμλ©΄, 맡μ μ¬μ©νλ©΄ 컨ν μ΄λκ° λ΄κ³ μλ κ°κ°μ κ°μ 맀κ°λ³μλ₯Ό ν΅ν΄ λ°μ ν¨μμ μ μ©ν ν,
λ€μ 컨ν μ΄λμ ν¬μ₯νμ¬ λ°νν©λλ€. μ΄ λ, κΈ°μ‘΄ 컨ν μ΄λμ κ°μ λ³κ²½λμ§ μκ³ μλ‘μ΄ μ»¨ν μ΄λκ° μμ±λμ΄ λ°νλ©λλ€.
κ·Έλ κΈ° λλ¬Έμ mapμ κΈ°μ‘΄ λ°μ΄ν°λ₯Ό λ³ν(transform)νλ λ° λ§μ΄ μ¬μ©λ©λλ€.
곡μλ¬Έμμλ λ€μκ³Ό κ°μ΄ μ μλμ΄ μμ΅λλ€.
transformμ΄λΌλ 맀ν ν΄λ‘μ ννμ 맀κ°λ³μλ₯Ό κ°μ§κ³ μκ³ , μ΄ ν΄λ‘μ λ 컨ν μ΄λμ μμλ₯Ό 맀κ°λ³μλ‘ λ°μ κ°μ λ³νν΄ λ°νν©λλ€.
κ·Έλ¦¬κ³ ν΄λ‘μ λ₯Ό ν΅ν΄μ λ³νλ μμλ₯Ό ν¬ν¨νλ λ°°μ΄μ μ΅μ’ μ μΌλ‘ λ°ννκ³ μλ κ²μ νμΈν μ μμ΅λλ€.
μ΄μ ꡬ체μ μΈ μ½λ μμλ₯Ό ν΅ν΄ μλ²½ν μ΄ν΄ν΄λ΄ μλ€!!
// numbersμ κ° μμμ 2 κ³±νκΈ°
// map μ¬μ©
let numbers = [1, 2, 3, 4]
let doubledNumbers: [Int] = numbers.map { $0 * 2 }
print(doubledNumbers) // [2, 4, 6, 8]
// for λ°λ³΅λ¬Έ μ¬μ©
let numbers = [1, 2, 3, 4]
let doubledNumbers: [Int] = []
for i in numbers {
doubledNumbers.append(i * 2)
}
print(doubledNumbers) // [2, 4, 6, 8]
μμ μ½λλ λ°°μ΄μ κ° μμμ 2λ₯Ό κ³±ν κ°μ λ°ννλ κ°λ¨ν μμμ λλ€.
μ΄ μμ μ for λ°λ³΅λ¬Έμ μ΄μ©ν΄μλ μ²λ¦¬ν μ μλλ°μ,
mapμ 컨ν μ΄λ μμλ₯Ό 맀κ°λ³μλ‘ λ°μ ν΄λ‘μ μμ μ°μ°μΌλ‘ μ²λ¦¬νμ¬ λ³νλ κ°μ λ°λ‘ μλ‘μ΄ μ»¨ν μ΄λλ‘ λ°ννκΈ° λλ¬Έμ
볡μ‘ν μ°μ°μΌμλ‘ mapμ μ¬μ©νλ κ²μ΄ forλ¬Έμ μ¬μ©νλ κ²½μ°λ³΄λ€ ν¨μ¬ λ κ°κ²°νκ² ννμ΄ κ°λ₯ν©λλ€!
filter
filterλ ν¨μ μ΄λ¦μΌλ‘λ μ§κ΄μ μΌλ‘ μ μ μλ―μ΄ μ»¨ν μ΄λ λ΄λΆμ κ°μ κ±Έλ¬μ μΆμΆνλ μν μ νλ κ³ μ°¨ν¨μμ λλ€.
κ·Έλ κΈ° λλ¬Έμ νΉμ 쑰건μ λ§κ² κ°μ κ±Έλ¬λ΄κ³ μΆμ λ λ§μ΄ μ¬μ©λκ² μ£ ??
filterλ mapκ³Ό λ§μ°¬κ°μ§λ‘ μλ‘μ΄ μ»¨ν μ΄λμ κ°μ λ΄μ λ°νν΄μ€λλ€.
곡μλ¬Έμμλ λ€μκ³Ό κ°μ΄ μ μλμ΄ μμ΅λλ€.
filter ν¨μμ 맀κ°λ³μλ‘ μ λ¬λλ isIncludedλΌλ ν΄λ‘μ λ Bool νμ μ κ°μ λ°νν©λλ€.
μ΄ ν΄λ‘μ λ 컨ν μ΄λμ μμλ₯Ό μΈμλ‘ λ°μ μμκ° μ΅μ’ μ μΌλ‘ λ°νλ μλ‘μ΄ μ»¨ν μ΄λμ ν¬ν¨λ νλͺ©μ΄λΌκ³ νλ¨νλ©΄ trueλ₯Ό, μλλΌλ©΄ falseλ₯Ό λ°νν©λλ€. μ½λ μμλ‘ λ μ΄ν΄λ΄ μλ€!!
// numbersμμ μ§μλ§ μΆμΆ
// filter μ¬μ©
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [2, 4, 6, 8]
// for λ°λ³΅λ¬Έ μ¬μ©
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var evenNumbers: [Int] = []
for number in numbers {
if number % 2 == 0 {
evenNumbers.append(number)
}
}
print(evenNumbers) // [2, 4, 6, 8]
μμ μ½λλ κΈ°μ‘΄ λ°°μ΄μμ μ§μλ§ μΆμΆνλ μ°μ°μ νλ κ°λ¨ν μμμ λλ€.
filter ν¨μμ μμλ for λ°λ³΅λ¬Έμ μ¬μ©ν μμμ λΉκ΅λ₯Ό ν΄λ³΄μλλ°μ,
forλ¬ΈμΌλ‘ λ°°μ΄μ μννλ©° 쑰건(μ§μμΈ μμ)μ λ§λ μμλ€μ μλ‘μ΄ λ°°μ΄μ νλμ© append ν΄μ£Όλ κ³Όμ μ
filterλ‘ λ³΄λ€ μ½κ³ κ°λ¨νκ² μ²λ¦¬ν μ μλ€λ κ²μ νμΈν μ μμ΅λλ€!
reduce
reduceλ 컨ν μ΄λ λ΄λΆμ μμλ€μ νλλ‘ ν©νλ κΈ°λ₯μ μ€ννλ κ³ μ°¨ν¨μμ λλ€.
λ°λ‘ 곡μλ¬Έμλ₯Ό νμΈν΄λ³΄λ©΄, λ€μκ³Ό κ°μ΄ μ μλμ΄ μμ΅λλ€.
μμμ μ΄ν΄λ³Έ map, filterμ λ¬λ¦¬ 맀κ°λ³μλ‘ λ°λ ν΄λ‘μ κ° λ κ° μ λλ€!
첫 λ²μ§Έ 맀κ°λ³μμΈ initialResultλΌλ μ΄λ¦μ ν΄λ‘μ λ‘ μ λ¬λλ κ°μ ν΅ν΄μ μ΄κΉκ°μ μ§μ ν΄μ€ μ μμ΅λλ€.
λ λ²μ§Έ 맀κ°λ³μμΈ nextPartialResultλΌλ μ΄λ¦μ ν΄λ‘μ λ 맀κ°λ³μλ₯Ό λ κ° κ°μ§λλ°,
첫 λ²μ§Έ 맀κ°λ³μλ initialResult 맀κ°λ³μλ₯Ό ν΅ν΄ μ λ¬λ°μ μ΄κΉκ° λλ μ΄μ ν΄λ‘μ μ κ²°κ΄κ°μ λλ€. μ΄λ λͺ¨λ μνκ° λλ κ²½μ°, reduce ν¨μμ μ΅μ’ κ²°κ΄κ°μ΄ λ©λλ€.
λ λ²μ§Έ 맀κ°λ³μλ reduce ν¨μκ° νμ¬ μννκ³ μλ 컨ν μ΄λμ μμμ λλ€.
μ€λͺ λ§μΌλ‘ μ΄ν΄κ° μ‘°κΈ μ΄λ €μΈ μ μλλ°, μμ μ½λλ₯Ό ν΅ν΄μ λ μ΄ν΄λ΄ μλ€!
// κ° μμμ ν© κ΅¬νκΈ°
// reduce μ¬μ©
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 55
// for λ°λ³΅λ¬Έ μ¬μ©
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var sum = 0
for number in numbers {
sum += number
}
print(sum) // 55
μμ μμμ½λλ numbers λ°°μ΄μ λͺ¨λ μμμ ν©μ ꡬνλ κ°λ¨ν μμ μ λλ€.
μμ μμλ€κ³Ό λ§μ°¬κ°μ§λ‘ for λ°λ³΅λ¬ΈμΌλ‘ λ°°μ΄μ μννλ©΄μ ν©μ ꡬνλ κ²½μ°μ λΉκ΅ν΄λ³΄μλλ°μ, ν¨μ¬ λ ννμμ΄ κ°λ¨ν΄μ§λ κ²μ νμΈν μ μμ£ ??
reduce μ¬μ© μμ μ½λλ₯Ό 보면, 0μ μ΄κΉκ°μΌλ‘ κ°μ§κ³ 컨ν μ΄λλ₯Ό μννλ©° μ΄μ μ κ°μ κ³μ μμλ€μ λν΄ μ΅μ’ κ²°κ΄κ°μ λ°ννλ κ²μ μ μ μμ΅λλ€.
$0μλ μ²μμ μ΄κΉκ°μΈ 0μ΄ μ λ¬λκ³ , 0λΆν° μΆλ°ν΄ λ§μ§λ§ μμκΉμ§ μννλ λ΄λ΄μ κ²°κ΄κ°μ΄ λ©λλ€.
$1μ νμ¬ μννκ³ μλ μμμ κ°μ λλ€. κ·Έλ κΈ° λλ¬Έμ $0(λμ ν©κ³)μ $1(νμ¬ μμ)μ λν κ°μ΄ μ΅μ’ λ°ν κ°μ΄ λλ κ²μ λλ€!
μ΄λ κ² Swiftμ λνμ μΈ κ³ μ°¨ν¨μ 3κ°μ§λ₯Ό μ 리ν΄λ³΄μλλ°μ!
κ³ μ°¨ν¨μλ₯Ό μ νμ©νλ©΄ κΈ°μ‘΄ 쑰건문, λ°λ³΅λ¬Έ λ±μΌλ‘ μ²λ¦¬νλ μ½λλ κ°κ²°νκ² μ€μ΄λ κ²μ΄ κ°λ₯ν κ² κ°μ΅λλ€.
μκ³ λ¦¬μ¦ λ¬Έμ νμ΄μλ μ μ©νκ² νμ©λλ μ μ 리ν΄λλ©΄ μ’μ κ² κ°μ΅λλ€!!ππ
[μ°Έκ³ μλ£]
<Apple 곡μ λ¬Έμ>
https://developer.apple.com/documentation/swift/array/map(_:)-87c4d
https://developer.apple.com/documentation/swift/sequence/filter(_:)
https://developer.apple.com/documentation/swift/array/reduce(_:_:)
<μ€μννΈ νλ‘κ·Έλλ°: Swift 5>
'π iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] lazy ν€μλ (0) | 2023.03.18 |
---|---|
[Swift] enumerated() (0) | 2023.01.07 |
[Swift] νμ μΆλ‘ κ³Ό νμ μ΄λ Έν μ΄μ (0) | 2022.07.31 |
[Swift] if letκ³Ό guard letμ μ°¨μ΄ (4) | 2022.03.04 |
[Swift] Escaping Closure(νμΆ ν΄λ‘μ ) (8) | 2022.02.21 |