swift 5 문법
[swift] 16. 고차 함수(Higher-order function)
jake-kim
2020. 5. 24. 20:58
1. 고차함수(Higher-order function)란?
하나 이상의 함수를 인자로 취하거나 함수를 반환하는 함수를 의미
- higher order function: 함수 내부에서 일어나는 특성 (함수를 인수로 받는 것, 함수를 리턴하는 것)
- first class: 함수 외부에서 일어나는 특성 (함수를 변수에 대입 가능한 것)
ex) 배열에서 각 원소들을 접근하여 새로운 값을 생성하거나(map),
조건을 정하여 그 조건에 맞는 원소만 접근하거나(filter),
배열을 하나의 값으로 표현하거나(reduce)
2. swift의 대표적인 고차함수
1) Map
콜렉션 내부의 기존 데이터를 변형(transform)하여 새로운 콜렉션 생성
* 아래 예제를 map을 이용해서 for문 없이 표현하면?
let arr = [1,2,3]
var doubleArr: [Int] = [Int]()
for item in arr {
doubleArr.append(item*2)
}
sol)
let arr = [1,2,3]
var doubleArr = arr.map { (n:Int) -> Int in
return n * 2
}
* flatMap, compactMap 참고: ios-development.tistory.com/357
2) filter
콜렉션 내부의 기존 데이터를 돌면서 특정 조건에 맞는 것만 선택하는 것
* 아래 예제를 map을 이용해서 for문 없이 표현하면?
let arr = [1,2,3,4,5]
var doubleArr: [Int] = [Int]()
for item in arr {
if item % 2 == 0 {
doubleArr.append(item*2)
}
}
sol)
let arr = [1,2,3,4,5]
var doubleArr = arr.filter{(n: Int) -> Bool in
return n % 2 == 0
}
}
3) reduce
콜렉션 내부의 컨텐츠를 하나로 결합 (...array to value)
.reduce(초기값) { (누적값 + 배열에 존재하는 값) }
* 아래 예제를 reduce를 이용하여 for문 없이 표현하면?
let arr = [1,2,3,4,5]
var sum = 0
for item in arr {
sum += item
}
sol)
let arr = [1,2,3,4,5]
var sum = arr.reduce(0) {(first: Int, second: Int) -> Int in
return first + second
}
/*
first=0, second=1
first=1, second=2
first=3, second=3
first=6, second=4
first=10, second=5
*/