티스토리 뷰

[시작]


- 고차함수 : 매개변수로 함수를 갖는 함수

- Swift의 유용한 대표적인 고차함수 map, filter, reduce



[맵 map]


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

- 배열, 딕셔너리, 세트, 옵셔널 등에서 사용 가능

 : Sequence, Collection 프로토콜을 준수하는 타입과 옵셔널

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

- 기존 데이터를 변형하는 데 많이 사용함

1
2
3
4
let array: [Int= [1,2,3,4,5,6]
let mappedArray = array.map { $0 * 2 }
print(mappedArray)  //2, 4, 6, 8, 10, 12
 
cs


- for-in 구문과 비교하여 성능상 이점

 : 빈 배열을 생성하지 않아도 됨

 : append 연산을 실행하기 위한 시간도 필요 없음



[필터 filter]


- 컨테이너 내부의 값을 걸러서 추출하는 함수

- 매개변수로 전달되는 함수의 반환형은 Bool

 : 새로운 컨테이너에 포함될 항목이라면 true, 아니면 false를 반환

1
2
3
4
let array: [Int= [1,2,3,4,5,6]
let mappedArray = array.filter { $0 % 2 == 0 }
print(mappedArray)  //2, 4, 6
 
cs


1
2
3
4
let array: [Int= [1,2,3,4,5,6]
let mappedArray = array.filter { $0 % 2 == 0 }.map { $0 * 2 }
print(mappedArray)  //4, 8, 12
 
cs




[리듀스 reduce]


- 컨테이너 내부의 콘텐츠를 하나로 합함

- 전달받은 클로저의 연산 결과로 합해줌


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

- 두 번째 리듀스 : 클로저가 결과값을 반환하지 않음, inout 매개변수로 정의된 초기값에 직접 연산을 실행하게 됨

1
2
3
4
5
6
7
8
9
10
11
12
let array: [Int= [1,2,3,4,5,6]
 
let reduce1 = array.reduce(0) { (result, value) -> Int in
    return result + value
}
print(reduce1)  //21
 
let reduce2 = array.reduce(into: 0) { (result, value) in
    result += value
}
print(reduce2)  //21
 
cs


- 두 번째 리듀스를 사용하면 다른 컨테이너에 값을 변경하여 넣어줄 수도 있음

'Swift > 야곰의 스위프트' 카테고리의 다른 글

17장 서브스크립트  (0) 2018.02.28
16장 모나드  (0) 2018.02.12
14장 옵셔널 체이닝과 빠른 종료  (0) 2018.02.12
13장 클로저  (0) 2018.02.12
12장 접근제어  (0) 2018.02.05
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함