1. 고차함수
- 다른 함수를 전달인자로 받거나 실행 결과를 함수로 반환하는 함수
- 클로저 전달 가능
- map / filter / reduce 가 대표적
- 컨테이너 타입인 Array / Set / Dictionary 등에 구현되어 있음
2. map
let numbers: [Int] = [0, 1, 2, 3, 4]
var doubledNumbers: [Int]
var strings: [String]
doubledNumbers = [Int]()
strings = [String]()
for number in numbers {
doubledNumbers.append(number * 2)
strings.append("\(number)")
}
print(doubledNumbers)
print(strings)
doubledNumbers = numbers.map({ (number: Int) -> Int in
return number * 2
})
strings = numbers.map({ (number: Int) -> String in
return "\(number)"
})
print(doubledNumbers)
print(strings)
doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers)
3. filter
- 컨테이너 내부값을 걸러 새로운 컨테이너로 추출
- 기존 for 구문
var filtered: [Int] = [Int]()
for number in numbers {
if number % 2 == 0 {
filtered.append(number)
}
}
print(filtered)
let evenNumbers: [Int] = numbers.filter { (number: Int) -> Bool in
return number % 2 == 0
}
print(evenNumbers)
let oddNumbers: [Int] = numbers.filter {
$0 % 2 != 0
}
print(oddNumbers)
4. reduce
let someNumbers: [Int] = [2, 8, 15]
var result: Int = 0
for number in someNumbers {
result += number
}
print(result)
let sum: Int = someNumbers.reduce(0, { (first: Int, second: Int) -> Int in
return first + second
})
print(sum)
var subtract: Int = someNumbers.reduce(0, { (first: Int, second: Int) -> Int in
return first - second
})
print(subtract)
let sumFromThree = someNumbers.reduce(3) { $0 + $1 }
print(sumFromThree)