티스토리 뷰
Combine ) Operator (4) - Applying Mathematical Operations on Elements
Zedd0202 2020. 6. 14. 15:35
안녕하세요 :) Zedd입니다.
오늘은 Combine 4번째 시간~
Applying Mathematical Operations on Elements 섹션입니다.
뭔가 수학적인 오퍼레이션을 적용하는...Operator같네요.
count
max
max(by:)
tryMax(by:)
min()
min(by:)
tryMin(by:)
진짜 오늘은 개쉽다...솔직히 이거랑 이거 다음 섹션, 다음다음 섹션은 너무너무 쉬워서..;;
한 글에 다 쓰고 싶은데........ㅋ
그럼 또 오퍼레이터가 너무 많아져서 그냥 끊겠습니다.
암튼 오늘건 이름만봐도 뭔지 알겠죠...try어쩌고 빼고 다 Swift Standard Library에 있는거랑 똑같아요~
count
더 이상의 자세한 설명은 생략한다.
max
더 이상의 자세한 설명은 생략한다.22
max같은 경우에는 그리고 앞으로 나올 min도 마찬가지지만
OutPut 타입이이 Comparable 프로토콜을 준수해야 합니다.
max(by:)
그냥 Swift Standard Libray의 max(by: )랑 똑같아요!!!
upstream의 요소 타입이 Compareable프로토콜을 준수하지 않을 경우에 유용하겠죠?
물론 closure안에서는 Compareable한 값으로 비교 해야겠지만 ㅎ
파라미터 이름은 안보이지만 by areInIncreasingOrder입니다.
그래서 areInIncreasingOrder가 true면 순서가 증가한다! 라고 할 수 있는거에요.
by안에 closure를 넣을 수 있는데, closure의 두 요소가 increasing order면 true를 리턴합니다.
같이 해봅시다.
1. $0: 5 / $1: 12
5 < 12 == true
2. 1에서 값이 true가 나왔죠? areInIncreasingOrder가 true. 큰값이 12이므로 12와 비교.
$0: 12 / $1: 1
12 < 1 == false
3. 여전히 12가 가장 큼.
$0: 12 / $1: 8
12 < 8 == false
4. $0: 12 / $1: 11
12 < 11 == false
=> 12
tryMax(by:)
아니 try류들 너무 쓸데없는거 많아
결과는
completion: failure(__lldb_expr_88.IllegalValueError())
로 나오겠죠? (13때문에)
근데!!!! 지금 부등호 방향이
이렇게 되어있죠? 만약 부등호 방향이 반대면 어떤 결과가 나올까요!?
value: 0
completion: finished
이런 결과가 나오게 됩니다.
first로 검사를 한다는 사실을 잊지마세요!
아시는 분들도 많으시겠지만, 왜 이런 결과가 나오는지 살펴봅시다!
[0, 10, 6, 13, 22, 22]
1. first: 0 / second: 10
0 > 10 => false
여기서 max가 10으로 되는게 아니구요. 현재 areInIncreasingOrder(파라미터 이름)가 false가 나온 상황입니다.
그래서 여기서는 0이 다음값과 비교할 값으로 저장되게 됩니다. 그냥 단지 false가 나왔으니까!!!!
그냥 넘어간다고 보시면 됩니다.
어 false야? 그럼 다음값이랑 비교해보겠음;; ㅂㅂ~ 이런 느낌이었는데 저는,.,,
2. first: 0 / second: 6
0 > 6 => false
3. first: 0 / second: 13
0 > 13 => false
4. first: 0 / second: 22
0 > 22 => false
5. first: 0 / second: 22
0 > 22 => false
여기서 항상 first가 0이므로 first % 2 == 0이 항상 true이게 되죠!
그래서
value: 0
completion: finished
라는 결과가 나오게 됩니다.
min()
더 이상의 자세한 설명은 생략한다 33
min(by:)
max(by:)와 같습니다.
closure의 두 요소가 increasing order면 true를 리턴합니다.
근데 min은 신기한게
$0(first)가 five. 즉 5일 것 같은데, 두번째 요소(queen)가 first로 들어오고, $1이 첫번째 요소에요;
그러니까 이렇게 있으면
[.five, .queen, .ace, .eight, .king]
$0.rawValue = 12 (max에서는 여기가 5였음)
$1.rawValue = 5 (max에서는 여기서 12였음)
이런식..
왜지..?
ㅇㅏ무튼 이것도 해보면
1. $0: 12 / $1: 5
12 < 5 == false
아니 근데 왜 $0이;;;;;....12인지는 잘 모르겠지만..첫번째 값은 5잖아요?
5랑 다른 값을 비교했는데 false가 나왔어. 아 false야? ㅇㅋ 다음값이랑 비교해봄 ㅂㅂ;;
그래서 5가 그대로 넘어갑니다.
2. $0: 1 / $1: 5
근데 5가 $0로 들어가는게 아니라 $1로 들어가서 비교됨;;
암튼
1 < 5 == true
min을 찾는거니까 true나왔다?
나보다 작구나????? ㅇㅋ~~ 1이 저장됨.
3. $0: 8 / $1: 1
8 < 1 == false
여전히 1이 가장 작은 값. 1이 내려감
4. $0: 13 / $1: 1
13 < 1 == false
=> 1. 즉 ace.
tryMin(by:)
이건 따로 보진 않을게요!
closure를 true로 리턴시킨 그 값이 다음값으로 저장되게 된다~ 만 아시면 됩니다.
이번거 쉽다는거 취소 ㅎ...........
아니 제가 바보라,,,,,그런지,,,는,,,몰라도,,,,,,,중간에,,,아니 이게 왜,,,?
아니 이게 왜 이해가 안가지?
나 바본가,,,? 아니 이게 근데 왜ㅑ이렇지,,,?
그랬음 ㅎ **
다음 글 읽으러가기
'Combine' 카테고리의 다른 글
Combine ) Operator (6) - Applying Matching Criteria to Elements (1) | 2020.07.27 |
---|---|
Combine ) Operator (5) - Applying Sequence Operations to Elements (0) | 2020.07.26 |
Combine ) Operator (3) - Reducing Elements (0) | 2020.06.05 |
Combine ) Operator (2) - Filtering Elements (1) | 2020.05.30 |
Combine ) Operator (1) - Mapping Elements (0) | 2020.05.21 |
- Swift
- swift 공부
- np-hard
- swift3
- 스위프트 문법
- actor
- IOS
- fastlane
- FLUTTER
- UIBezierPath
- swift array
- Git
- ios 13
- 피아노
- Xcode
- github
- iOS delegate
- Accessibility
- WWDC
- Combine
- 스위프트
- 회고
- WidgetKit
- WKWebView
- swift delegate
- 제이슨 파싱
- swift tutorial
- SwiftUI
- swift sort
- np-complete
- Total
- Today
- Yesterday