모바일/SwiftUI ios 공부
고차함수, map, filter, reduce / Xcode SwiftUI Playground 공부
yy_dd2
2021. 11. 29. 14:59
반응형
고차함수
- 다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수
- 스위프트의 함수(클로저)는 일급시민(일급객체)이기 때문에
함수의 전달인자로 전달할 수 있고 함수의 결과값으로 반환할 수 있다
- 스위프트에서 제공하는 map, filter, reduce 고차 함수가 있고
컨테이너 타입(Array, Set, Dictionary 등) 에 구현되어 있다.
map (변형)
map 함수는 컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너를 생성한다.
for 구문과 비슷하게 사용할 수 있지만
map 을 사용하게 되면 클로저 상수를 통해 코드의 재사용이 용이해지고
컴파일러 최적화 측면에서 성능이 좋아진다.
let numbers = [0,1,2,3]
let mapArray = numbers.map { (number) -> Int in
return number * 2
}
print("map \(mapArray)")
filter (추출)
filter 함수는 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출한다.
filter 의 매개변수로 전달되는 함수의 반환 타입은 Bool 이다.
true 면 값을 포함, false 면 값을 배재
map 처럼 새로운 컨테이너를 생성해서 값을 반환
// 클로저 표현으로 간소화 작성된 필터
let intArray = [10,5,20,13,4]
let filterArray = intArray.filter{ $0 > 5 }
print("filter \(filterArray)")
reduce (결합)
reduce 함수는 컨테이너 내부의 콘텐츠를 하나로 통합해준다.
정수 배열이면 전달 받은 함수의 연산 결과로 합쳐주고, 문자열 배열이면 문자열을 하나로 합쳐준다.
첫 번째 매개변수를 통해 초기 값을 설정할 수 있다. 초기 값을 클로저를 통해 $0 로 사용할 수 있다.
다른 고차 함수들과 연결해서 사용할 수 있다.
let someArray = [1,2,3,4,5]
let reduceResult = someArray.reduce(2) {
(result: Int, element: Int) -> Int in
print("\(result) + \(element)")
return result + element
}
print( "reduce \(reduceResult)")
반응형