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
- RxCocoa
- HIG
- map
- collectionview
- UITextView
- swift documentation
- SWIFT
- swiftUI
- clean architecture
- ios
- 리펙터링
- Protocol
- 스위프트
- Clean Code
- Xcode
- combine
- Observable
- 클린 코드
- rxswift
- uitableview
- uiscrollview
- ribs
- 리펙토링
- tableView
- UICollectionView
- MVVM
- Refactoring
- Human interface guide
- 애니메이션
- 리팩토링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 고차함수map(map, flatMap, compactMap), filter, reduce 본문
iOS 기본 (swift)
[iOS - swift] 고차함수map(map, flatMap, compactMap), filter, reduce
jake-kim 2021. 2. 28. 01:08고차함수
- 고차함수: parameter로 함수를 받는 함수
- higher order function: 함수 내부에서 일어나는 특성 (함수를 인수로 받는 것, 함수를 리턴하는 것)
- first class: 함수 외부에서 일어나는 특성 (함수를 변수에 대입 가능한 것)
let numbers = [1, 2, 3, 4]
let newNumbers = numbers.map { number in
return number + 1
}
- 대표적으로 3가지 존재: map(맵핑), filter(추출), reduce(결합, 차원을 줄여주는 것)
- reduce는 초기값을 넣어주고, 클로저의 인수는 누적해서 쌓이는 값 하나와 배열의 값
let numbers = [1, 2, 3, 4]
let mapEx = numbers.map { number in
return number + 1
}
let filterEx = numbers.map { number in
return number % 2 == 0
}
let reduceEx = numbers.reduce(10, { (number1, number2) in // 초기값을 10으로 지정 (첫 number1의 값은 10)
print(number1) // 10 -> 11 -> 13 -> 16
print(number2) // 1 -> 2 -> 3 -> 4
return number1 + number2
})
print(mapEx) // [2, 3, 4, 5]
print(filterEx) // [false, true, false, true]
print(reduceEx) // 20
map, flatMap, compactMap
- map: n차 배열 -> n차 배열
- flatMap: n차 배열 -> n-1차 배열
// ex1)
let numbers = [[1], [2, 3], [4, 5], [6]]
let flatmapEx = numbers.flatMap { number in
return number
}
print(flatmapEx) // [1, 2, 3, 4, 5, 6]
// ex2)
let numbers = [[1, 2, 3], [4, 5], [6, [7]]]
let flatmapResult = numbers.flatMap { $0 } // [1, 2, 3, 4, 5, 6, [7]]
- compactMap: n차 배열 -> 'optional binding'이 된 n차 배열
let numbers = [1, 2, 3, nil, Optional(4)]
let flatmapEx = numbers.compactMap { number in
return number
}
print(flatmapEx) // [1, 2, 3, 4, 5, 6]
filter
- 클로저에 Bool 값을 리턴하여, true인 값들만 filtering하는 연산자
class Person {
let id: Int
let name: String
init(id: Int, name: String) {
self.id = id
self.name = name
}
}
let person1 = Person(id: 1, name: "kim")
let person2 = Person(id: 2, name: "lee")
let person3 = Person(id: 3, name: "lee")
let people = [person1, person2, person3]
let peopleNameLee = people.filter { (person) -> Bool in
return person.name == "lee"
}
print(peopleNameLee) // Person(id: 2, name: "lee"), Person(id: 3, name: "lee")
reduce
- 배열을 하나의 값으로 reduce(줄이는) 것: .reduce(초기값) { (누적값 + 배열에 존재하는 값) }
let numbers = [1, 2, 3]
let number = numbers.reduce(5) { (accumulatedValue, value) -> Int in
return accumulatedValue + value
}
print(number) // 11
'iOS 기본 (swift)' 카테고리의 다른 글
[iOS - swift] KVO(Key-Value Observing) (0) | 2021.03.07 |
---|---|
[iOS - swift] for, stride, Range (0) | 2021.03.03 |
[iOS - swift] Result 타입 (성공, 실패) (0) | 2021.02.26 |
[iOS - swift] property 구분 방법 (stored property, computed property, lazy property) (0) | 2021.02.25 |
[iOS - swift] switch와 where을 같이 사용하는 방법 (0) | 2021.02.25 |
Comments