고차함수란?
map 함수 사용
import UIKit
import Foundation
func normalExample() {
let numbers: [Int] = [0, 1, 2, 3, 4]
var doubledNumbers: [Int]
var string: [String]
doubledNumbers = [Int]()
string = [String]()
for num in numbers {
doubledNumbers.append(num * 2)
string.append("\(num)")
}
print(doubledNumbers)
print(string)
}
func mapExample() {
let numbers: [Int] = [0, 1, 2, 3, 4]
var doubledNumbers: [Int]
var string: [String]
// numbers의 각 요소를 2배하여 새로운 배열 반환
doubledNumbers = numbers.map({ (num: Int) -> Int in
return num * 2
})
// numbers 의 각 요소를 문자열로 변환하여 새로운 배열 반환
string = numbers.map({ (num: Int)->String in
return "\(num)"
})
print(doubledNumbers)
print(string)
}
func mapExample2() {
let numbers: [Int] = [0, 1, 2, 3, 4]
var doubledNumbers: [Int]
var string: [String]
doubledNumbers = numbers.map({ $0 * 2})
string = numbers.map({ "\($0)"})
print(doubledNumbers)
print(string)
}
print("==================================")
print("[*] 고차 함수를 사용 안한 로직")
var start = CFAbsoluteTimeGetCurrent()
normalExample()
var processTime = CFAbsoluteTimeGetCurrent() - start
print("경과 시간: \(processTime)")
print("[*] 고차 함수를 사용한 로직 (Map)")
start = CFAbsoluteTimeGetCurrent()
mapExample()
processTime = CFAbsoluteTimeGetCurrent() - start
print("경과 시간: \(processTime)")
print("[*] 고차 함수를 사용한 로직 2 (Map)")
start = CFAbsoluteTimeGetCurrent()
mapExample2()
processTime = CFAbsoluteTimeGetCurrent() - start
print("경과 시간: \(processTime)")
==================================
[*] 고차 함수를 사용 안한 로직
[0, 2, 4, 6, 8]
["0", "1", "2", "3", "4"]
경과 시간: 0.0030128955841064453
[*] 고차 함수를 사용한 로직 (Map)
[0, 2, 4, 6, 8]
["0", "1", "2", "3", "4"]
경과 시간: 0.00010097026824951172
[*] 고차 함수를 사용한 로직 2 (Map)
[0, 2, 4, 6, 8]
["0", "1", "2", "3", "4"]
경과 시간: 8.499622344970703e-05
filter 사용
import UIKit
import Foundation
func orignalMethod() {
let numbers: [Int] = [0, 1, 2, 3, 4]
var filtered: [Int] = [Int]()
for num in numbers {
if num % 2 == 0 {
filtered.append(num)
}
}
print(filtered)
}
func filterMethod() {
let numbers: [Int] = [0, 1, 2, 3, 4]
let evenNumbers: [Int] = numbers.filter{ (num: Int) -> Bool in
return num % 2 == 0
}
print(evenNumbers)
}
func filterMethod2() {
let numbers: [Int] = [0, 1, 2, 3, 4]
let evenNumbers: [Int] = numbers.filter { $0 % 2 == 0 }
print(evenNumbers)
}
print("==================================")
print("[*] 고차 함수를 사용 안한 로직")
var start = CFAbsoluteTimeGetCurrent()
orignalMethod()
var processTime = CFAbsoluteTimeGetCurrent() - start
print("경과 시간: \(processTime)")
print("[*] 고차 함수를 사용한 로직 (filter) ")
start = CFAbsoluteTimeGetCurrent()
filterMethod()
processTime = CFAbsoluteTimeGetCurrent() - start
print("경과 시간: \(processTime)")
print("[*] 고차 함수를 사용한 로직 (filter) 2 ")
start = CFAbsoluteTimeGetCurrent()
filterMethod2()
processTime = CFAbsoluteTimeGetCurrent() - start
print("경과 시간: \(processTime)")
==================================
[*] 고차 함수를 사용 안한 로직
[0, 2, 4]
경과 시간: 0.007430911064147949
[*] 고차 함수를 사용한 로직 (filter)
[0, 2, 4]
경과 시간: 0.0005249977111816406
[*] 고차 함수를 사용한 로직 (filter) 2
[0, 2, 4]
경과 시간: 0.0001399517059326172
reduce 사용
import UIKit
import Foundation
func originalMethod() {
let someNumbers: [Int] = [2, 4, 6]
var result: Int = 0
for num in someNumbers {
result += num
}
print(result)
}
func reduceMethod() {
let someNumbers: [Int] = [2,4,6]
let sum: Int = someNumbers.reduce(0, {
(first: Int, second: Int) -> Int in
return first + second
})
print(sum)
}
func reduceMethod2() {
let someNumbers: [Int] = [2, 4, 6]
let sum: Int = someNumbers.reduce(0, { $0 + $1 })
print(sum)
}
print("==================================")
print("[*] 고차 함수를 사용 안한 로직")
var start = CFAbsoluteTimeGetCurrent()
originalMethod()
var processTime = CFAbsoluteTimeGetCurrent() - start
print("경과 시간: \(processTime)")
print("[*] 고차 함수를 사용한 로직 (reduce) ")
start = CFAbsoluteTimeGetCurrent()
reduceMethod()
processTime = CFAbsoluteTimeGetCurrent() - start
print("경과 시간: \(processTime)")
print("[*] 고차 함수를 사용한 로직 (filter) 2 ")
start = CFAbsoluteTimeGetCurrent()
reduceMethod2()
processTime = CFAbsoluteTimeGetCurrent() - start
print("경과 시간: \(processTime)")
==================================
[*] 고차 함수를 사용 안한 로직
12
경과 시간: 9.09566879272461e-05
[*] 고차 함수를 사용한 로직 (reduce)
12
경과 시간: 9.393692016601562e-05
[*] 고차 함수를 사용한 로직 (filter) 2
12
경과 시간: 8.702278137207031e-05
결론