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 | 29 | 30 |
Tags
- 개발
- regex
- 모바일
- iOS 13.0+
- IOS
- network
- github
- Tuist
- Navigation
- navigationsplitview
- UI
- xcodecloud
- SWIFTUI
- ios18
- xcode
- tuist #xcodecloud #ios #ci/cd #swiftlint #firebase
- ObjC
- swiftdata
- SWIFT
- combine
- Firebase
- test
- Git
- TCA
- 정규표현식
- concurrency
- Alamofire
- iOS 개발자
- composablearchitecture
- uikit
Archives
- Today
- Total
iOS 개발 기록
Swift - 고차함수 (map, filter, reduce) 본문
728x90
전에 쓴 글인 Swift의 특징과 프로그래밍 패러다임에서 함수형 프로그래밍의 대표적인 예가 고차함수다.
고차함수는 다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수를 뜻한다.
여기서 함수는 클로저 또한 포함된다.
Swift에서 제공하는 대표적인 고차함수의 예는 map, filter, reduce가 있다 .
map
기존에 컨테이너의 데이터를 변형해 새로운 컨테이너로 반환한다.
다음 예는 0부터 5까지의 수가 홀수인지 체크하여 Bool형태로 변형하는 방법이다.
let numbers: [Int] = [0, 1, 2, 3, 4, 5]
var checkOdd: [Bool] = []
// for문
for num in numbers {
if num%2 == 1 {
checkOdd.append(true)
} else {
checkOdd.append(false)
}
}
print(checkOdd)
// map
checkOdd = numbers.map{ $0%2 == 1 }
print(checkOdd)
compactMap, flatMap
compactMap : 각 컨테이너의 요소를 새로운 컨테이너로 반환할 때에 nil 값은 제외한다.
let strNumbers: [String] = ["0", "일", "2", "3", "4", "5"]
let map = strNumbers.map { Int($0) }
print(map)
let compact = strNumbers.compactMap{ Int($0) }
print(compact)
flatMap : 컨테이너의 데이터의 요소를 변환하면서 동시에 연결된 결과를 포함한 배열을 반환한다.
말이 어렵다 ... 간단하게 쓰면 2차원, 3차원과 같이 중첩된 배열을 플랫한 배열로 리턴한다.
3차원은 2차원으로, 2차원은 1차원 배열로 리턴한다.
let numbers: [[Int]] = [[0], [1], [2, 3], [4, 5, 6]]
let flat = numbers.flatMap { $0 }
print(flat)
filter
기존의 컨테이너의 데이터를 조건에 만족하는 값에 해당하는 새로운 컨테이너로 추출한다.
다음 예는 홀수값만 추출하는 방법이다.
let numbers: [Int] = [0, 1, 2, 3, 4, 5]
var checkOdd: [Int] = []
// for문
for num in numbers {
if num%2 == 1 {
checkOdd.append(num)
}
}
print(checkOdd)
// filter
checkOdd = numbers.filter{ $0%2 == 1 }
print(checkOdd)
reduce
컨테이너의 요소를 결합한 결과를 반환한다.
매개변수로는 초기값과 컨테이너의 요소를 결합하는 방법을 넘겨준다.
다음 예는 배열의 모든 값을 더한 값을 출력하는 방법이다.
let numbers: [Int] = [0, 1, 2, 3, 4, 5]
var sum: Int = 0
// for문
for num in numbers {
sum += num
}
print(sum)
// reduce
sum = numbers.reduce(0, +)
print(sum)
'Swift' 카테고리의 다른 글
Swift - 동기와 비동기(sync, async), 직렬과 동시(serial, concurrent) (0) | 2022.07.21 |
---|---|
Swift - 옵셔널 (Optional) (0) | 2022.07.19 |
[iOS] PencilKit (0) | 2022.07.07 |
Swift 의 메모리 관리 (ARC, weak, unowned, lazy) (0) | 2022.05.31 |
Swift의 특징과 프로그래밍 패러다임 (0) | 2022.05.31 |