관리 메뉴

java,javascript,android,php,sql,공부용,메모용

고차함수, map, filter, reduce / Xcode SwiftUI Playground 공부 본문

모바일/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)")

 

 

 

반응형
Comments