Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 온라인 저지
- Kotlin
- 공부
- error
- Algorithm
- 안드로이드 공부
- 프로그래머스
- Level 1
- 정렬
- Python
- 알고리즘 공부
- greedy algorithm
- 오토레이아웃
- ios
- swift
- Swift공부
- iOS개발
- dfs
- 앱개발
- Autolayout
- SwiftUI
- Clean Architecture
- BFS
- 백준온라인저지
- 그리디 알고리즘
- UIKit
- 알고리즘
- 파이썬 풀이
- Android
- 파이썬
Archives
- Today
- Total
Tori의 개발 공부
[Swift] 고차함수 - map, filter, reduce 본문
고차함수란?
- 다른 함수를 전달인자로 받거나 함수의 실행 결과를 함수로 반환하는 함수이다.
- swift의 대표적인 고차함수로는 map, filter, reduce가 있다.
map
- 컨테이너 내부의 기존 데이터를 변형해 새 컨테이너를 생성한다.
- 즉 전달받은 함수를 통해 변형된 데이터를 반환하여 새 컨테이너로 만들어준다.
-> 기존값을 변경하는 것이 아니라 새로운 컨테이너를 생성하여 반환해 줌
// map
//map과 for-in 문 비교
var doubleNumbers:[Int] = []
for number in numbers {
doubleNumbers.append(number*2)
} //[0,2,4,6,8]
doubleNumbers = numbers.map({ (number) in
return number * 2
}) //[0,2,4,6,8]
//다양한 클로저 표현법으로 나타내기
var stringNumbers = numbers.map({ (number:Int) -> String in
return "\(number)"
}) ["0", "1", "2", "3", "4"]
//매개변수 및 반환타입 생략
stringNumbers = numbers.map({return "\($0)"})
//return 키워드 생략
stringNumbers = numbers.map({"\($0)"})
//후행 클로저
stringNumbers = numbers.map{"\($0)"}
doubleNumbers는 number에 2배를 해주는 함수를 각 원소에 적용하여 반환한 컨테이너이다.
stringNumbers는 각 원소를 string형태로 바꾸어 반환해 주었다.
뒤에 들어오는 함수를 클로저를 이용해서 간단한 형태로 다양하게 표현할 수 있다.
filter
- 컨테이너 내부의 값을 걸러서 추출하는 역할의 고차함수이다.
- 즉 조건에 맞는 원소들만 걸러서 반환한다.
- filter에 매개변수로 전달되는 함수의 반환타입은 Bool타입이여야 하며, 새 컨테이너에 포함될 항목이라면 true를 반환하고 아니라면 false를 반환하게 해줘야 한다.
//filter
let evenNumbers = numbers.filter{
return $0 % 2 == 0
}
//filter + map
let results = numbers.filter{$0 % 2 == 0}.map{$0 + 1}
print(results)//[1, 3, 5]
evenNumbers는 numbers에서 짝수만 걸러낸 컨테이너이다.
두 번째 코드에서는 filter와 map을 한 번에 같이 쓴 모습이다.
filter함수를 통해 짝수만 걸러낸 결과에 1씩 더해서 반환한다.
reduce
- 내부의 요소들을 주어진 연산을 하여 결과를 하나로 합치는 고차함수이다.
- reduce(초깃값, 함수) 형태이다.
- 초깃값부터 시작해서 원소를 하나씩 주어진 연산 함수를 적용한다.
//reduce
let sum = numbers.reduce(0){
return $0 + $1
}
print(sum) //10
모든 원소의 합을 구하는 함수이다. 초깃값을 0부터 하여 0 + 1 + 2 + 3 + 4 = 10 결과를 반환한다.
'IOS App Programming > Swift' 카테고리의 다른 글
[Swift] mutating 키워드란? (0) | 2023.05.10 |
---|---|
[Swift] 프로토콜 지향 프로그래밍 - 프로토콜 초기 구현 (0) | 2023.05.06 |
[Swift] 오류처리 - throws, do-catch, try (0) | 2023.04.12 |
[Swift] 프로토콜 - 프로토콜 구현, 채택, 클래스 전용 프로토콜 (0) | 2023.04.11 |
[Swift] 타입캐스팅 - is, as 연산자 (0) | 2023.04.11 |