티스토리 뷰

반응형

 

안녕하세요 :) 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로 리턴시킨 그 값이 다음값으로 저장되게 된다~ 만 아시면 됩니다.

 

이번거 쉽다는거 취소 ㅎ...........

아니 제가 바보라,,,,,그런지,,,는,,,몰라도,,,,,,,중간에,,,아니 이게 왜,,,?

아니 이게 왜 이해가 안가지?

나 바본가,,,? 아니 이게 근데 왜ㅑ이렇지,,,?

그랬음 ㅎ **

 

다음 글 읽으러가기

zeddios.tistory.com/1073

 

반응형