Swift.Map, Filter, Reduce
스위프트 프로그래밍 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이다.)
Author And Source
이 문제에 관하여(Swift.Map, Filter, Reduce), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@junstone1995/Swift.Map-Filter-Reduce저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)