π μΈμ (Argument) λ‘ ν¨μλ₯Ό μ λ¬ λ°κ±°λ μ€ν κ²°κ³Όλ‘ ν¨μλ₯Ό λ°ννλ ν¨μ
Swift μ ν¨μ (ν΄λ‘μ ) λ μΌκΈ κ°μ²΄μ΄λ―λ‘ ν¨μμ μΈμλ‘ ν¨μλ₯Ό μ λ¬ν μ μκ³ μ€ν κ²°κ³Όλ‘ ν¨μλ₯Ό λ°νν μ μμ΅λλ€.
β μ¦, κ³ μ°¨ν¨μ κ° λ μ μμ΅λλ€!!
μΌκΈ κ°μ²΄ (μΌκΈ μλ―Ό)
"λ€λ₯Έ κ°μ²΄λ€μ μΌλ°μ μΌλ‘ μ μ© κ°λ₯ν μ°μ°μ λͺ¨λ μ§μνλ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
λ³΄ν΅ ν¨μμ μΈμλ‘ λκΈ°κΈ°, μμ νκΈ°, λ³μμ λμ νκΈ° μ κ°μ μ°μ°μ μ§μν λ μΌκΈ κ°μ²΄λΌκ³ νλ€."
κ³ μ°¨ ν¨μ λ 컨ν μ΄λ νμ (Array, Set, Dictionary λ±) μ μ¬μ©λ μ μκ³ , μ΄λ€μ΄ κ°μ§ κ° μμμ λν΄ λμν©λλ€.
Swift νμ€ λΌμ΄λΈλ¬λ¦¬μμλ map
, compactMap
, flatMap
, reduce
, filter
, contains
, sorted
, forEach
, removeAll
λ±μ μ 곡νκ³ μμΌλ©°, μΌλ°μ μΌλ‘ νν ν΄λ‘μ (Trailing Closure)
λ₯Ό μ¬μ©ν΄μ ννν©λλ€.
μ΄ μ€μμ λνμ μΈ map
, filter
, reduce
λ₯Ό νλ² λ€λ£¨μ΄ λ³΄κ² μ΅λλ€!
λ³ν
Returns an array containing the results of mapping the given closure over the sequenceβs elements.
π https://developer.apple.com/documentation/swift/sequence/3018373-map
map
μ μ λ¬λ ν΄λ‘μ λ‘ λ³νν κ°μ²΄λ₯Ό 리ν΄ν©λλ€.
var floatNumbers : [Float] = [1.0, 2.0, 3.5, 4.0]
var integerNumbers : [Int] = floatNumbers.map { (num : Float) -> Int in
return Int(num)
}
print(integerNumbers) // [1, 2, 3, 4]
map
μ μΈμλ‘ ν΄λ‘μ κ° μ λ¬λμκ³ ν΄λ‘μ λ΄μμ λ°°μ΄ κ° μμμ λν΄ νλ³νμ΄λ μ μ λ°°μ΄μ λ°νν©λλ€.
λ¬Όλ‘ ν΄λ‘μ μμ μμ£Ό μ°λ νμ
μΆλ‘
, λ¦¬ν΄ κ΅¬λ¬Έ μλ΅
, νλΌλ―Έν° μ΄λ¦ μλ΅
μΌλ‘ λ κ°κ²°νκ² ννν μ μμ΅λλ€.
var integerNumbers : [Int] = floatNumbers.map { Int($0)! }
μ΄κ±Έ μΌλ°μ μΌλ‘ μ¬μ©νλ for-loop
λ‘ νννλ©΄ μ‘°κΈ λ κΈΈκ³ λ³΅μ‘ν μ½λλ‘ λ°λκ² μ£ ?
var floatNumbers : [Float] = [1.0, 2.0, 3.5, 4.0]
var integerNumbers : [Int] = []
for num in floatNumbers {
integerNumbers.append(Int(num))
}
쑰건μ λ§μ‘±νλ μμ μΆμΆ
Returns an array containing, in order, the elements of the sequence that satisfy the given predicate.
π https://developer.apple.com/documentation/swift/sequence/3018365-filter
filter
λ μ λ¬λ ν΄λ‘μ μ 쑰건μ λ§μ‘±νλ κ°μ²΄λ₯Ό 리ν΄ν©λλ€.
filter
λ‘ μ λ¬λλ ν΄λ‘μ μ λ¦¬ν΄ νμ
μ Bool
μ΄λ©° true
μΌ κ²½μ° ν΄λΉ μμλ₯Ό 리ν΄ν©λλ€.
var numbers : [Int] = Array(1...10)
var evenNumbers : [Int] = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [2, 4, 6, 8, 10]
λμ , κ²°ν©
Returns the result of combining the elements of the sequence using the given closure.
π https://developer.apple.com/documentation/swift/sequence/2907677-reduce
reduce
λ μ΄κΈ°κ°κ³Ό ν΄λ‘μ , λ κ°μ νλΌλ―Έν°λ₯Ό μ λ¬λ°κ³
κ° μμμ λνμ¬ ν΄λ‘μ λ΄μμ μ²λ¦¬νμ¬ μ΄κΈ°κ°μ λμ νμ¬ κ²°ν©ν μ μμ΅λλ€.
var numbers : [Int] = [1, 2, 3, 4, 5]
var factorialNum : Int = numbers.reduce(1) { (result : Int, num : Int) -> Int
return result *= num
}
print(factorialNum) // 120
μ΄μ²λΌ λ°°μ΄μ μννλ©° κ° μμμ λν΄ λμ νμ¬ μ²λ¦¬ν μ μμ΅λλ€.
var factorialNum : Int = numbers.reduce(1) { $0 *= $1 }
Swift μμλ μ°μ°μ μμ λ κ°μ νλΌλ―Έν°λ₯Ό λ°λ ν¨μμ΄λ―λ‘ μλμ κ°μ΄ ννν μ μμ΅λλ€.
var factorialNum : Int = numbers.reduce(1, *)
κ·Έλμ κ³ μ°¨ν¨μλ₯Ό μ¬μ©νλ©΄ λκ° μ’μκΉμ?
O(n)
μ€λμ κΉλνκ³ κ°κ²°ν μ½λ©μ ν μ μκ² ν΄μ£Όλ Swift μ κ³ μ°¨ν¨μμ λν΄ μμλ΄€μ΅λλ€.
μμ λνμ μΈ 3κ°μ§ μ΄μΈμλ Swift μλ μ μ©ν κ³ μ°¨ν¨μλ€μ΄ λ§μλ° νλ² λλ¬λ³΄μκΈΈ μΆμ²ν©λλ€!
Apple Swift Documentation - Sequence
https://developer.apple.com/documentation/swift/sequence
νλ¦° μ 보 λλ κΆκΈν μ μ΄ μλ€λ©΄ λκΈ λΆνλ립λλ€! μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€βΌοΈ