본문 바로가기
Languages/Swift

사당 iOS 스터디 3주차 - 맵, 필터, 리듀스

by 탄이. 2018. 8. 17.

CHAPTER 15 맵, 필터, 리듀스

__15.1 맵

맵은 자신을 호출할 때 매개변수로 전달된 함수를 실행하여 그 결과를 다시 반환해주는 함수

스위프트에서 맵은 배열, 딕셔너리, 세트, 옵셔널 등에서 사용

스위프트의 Sequence, Collection 프로토콜을 따르는 타입과 옵셔널은 모두 맵을 사용

맵을 사용하면 컨테이너가 담고 있던 각각의 값을 매개변수를 통해 받은 함수에 적용한 후 다시 컨테이너에 포장하여 반환

기존 컨테이너의 값은 변경되지 않고 새로운 컨테이너가 생성되어 반환

맵은 기존 데이터를 변형하는 데 많이 사용

__15.2 필터

필터는 말 그대로 컨테이너 내부의 값을 걸러서 추출하는 역할을 하는 고차함수

filter 함수의 매개변수로 전달되는 함수의 반환 타입은 Bool

__15.3 리듀스

리듀스는 컨테이너 내부의 콘텐츠를 하나로 합하는 기능을 실행하는 고차함수

배열이라면 배열의 모든 값을 전달인자로 전달받은 클로저의 연산 결과로 합해줍니다.

두 가지 리듀스

  • 첫 번째 리듀스는 클로저가 각 요소를 전달받아 연산한 후 값을 다음 클로저 실행을 위해 반환하며 컨테이너를 순환하는 형태

    • public func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result

      • initilalResult

        • 초깃값

      • nextPartialResult

        • 클로저

      • nextPartialResult 클로저의 첫 번째 매개변수

        • 모든 순회가 끝나면 리듀스의 최종 결괏값

  • 두 번째 리듀스 메서드는 컨테이너를 순환하며 클로저가 실행되지만 클로저가 따로 결괏값을 반환하지 않는 형태

    • public func reduce<Result>(into initialResult: Result, _ updateAccumulatingResult: (inout Result, Element) throws -> ()) rethrows -> Result

      • updateAccumulatingResult 매개변수로 전달받는 클로저의 매개변수 중 첫 번째 매개변수를 inout 매개변수로 사용

__15.4 맵, 필터, 리듀스의 활용





참고


야곰의 스위프트 프로그래밍 https://book.naver.com/bookdb/book_detail.nhn?bid=12571019

댓글