Swift.Map, Filter, Reduce

junseole·2021년 8월 18일
0

Swift-Basic

목록 보기
8/12
post-thumbnail

스위프트 프로그래밍 3판을 보고 정리한 내용입니다.

Map(맵)

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

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

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

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

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

let numbers:[Int] = [0, 1, 2, 3, 4]

//기본 클로저식 사용
var doubleNumbers = numbers.map({(number:Int) -> Int in return number * 2}) //[0, 2, 4, 8]

//매개변수 및 반환 타입 생략
doubleNumbers = numbers.map({return $0 * 2}) //[0, 2, 4, 8]

//반환 키워드 생략
doubleNumbers = numbers.map({$0 * 2}) //[0, 2, 4, 8]

//후행 클로저 사용
doubleNumbers = numbers.map{$0 * 2}

Filter(필터)

컨테이너 내부의 값을 걸러서 추출하는 역할을 하는 고차함수이다.

새로운 컨테이너에 값을 담아 반환한다.

반환타입은 Bool 타입이다.

let numbers:[Int] = [0, 1, 2, 3, 4]

let evenNumber: [Int] = numbers.filter{ (number:Int) -> Bool in return number % 2 == 0} // [0,2,4]

Map 과 fliter의 연계사용

let numbers:[Int] = [0, 1, 2, 3, 4]

let mapNum:[Int] = numbers.map{ $0 + 3} //[3,4,5,6,7]

let evenNumber:[Int] = mapNum.filter{$0 % 2 == 0} //[4,6]

// 메서드를 체인처럼 연결하여 사용할 수 있다.
let oddNumber:[Int] = numbers.map{ $0 + 3}.filter{ $0 % 2 == 1} // [3,5,7]

Reduce(리듀스)

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

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

let numbers:[Int] = [0, 1, 2, 3, 4]

var sum:Int = numbers.reduce(0,{(reuslt: Int , next: Int) -> Int in
    return reuslt + next
}) // 10

sum = numbers.reduce(10,+) // 20 (초기값은 10이다.)
profile
Swift와 함께 여행중입니다.

0개의 댓글