이것은이 게시물을 어떻게 작성합니까? 아닙니다. 대신, 어떻게 작동하는지 그리고 다른 사람들도 배울 수 있기를 바랍니다.Obj C에서 블록 비교기는 어떻게 작동합니까?
이 예제에서는 NSMutableArray에 NSDecimalNumber 개체가있는 경우를 가정 해 보겠습니다. 안의 객체가 특별한 순서없이 [-464.50, +457.20, 0, -1000]
이라고 가정 해 봅시다. 그것들을 비교하기 전에 나는 그것들에 절대 값을 적용한다.
제 코드에서는 sortUsingComparator
메서드를 사용하고 블록을 지정합니다. 나는 다른 조건을 테스트하고 여기에 그들이 jQuery과에 제시되어 같은 결과 시작일 :
return [person1Amount compare:person2Amount];
==> 0, 457.20, -464.50, -1000
, 경우
return [person2Amount compare:person1Amount];
==> -1000, -464.50, +457.42, 0
compare:
방법은 실제로 작동 않는 방법
NSDecimalNumber
의사
here은 실제로 나에게 설명하지 않습니다. 이 부분은 특히 나를 혼란 :
반환 값 NSOrderedAscending decimalNumber의 값이 수신기보다 큰 경우; NSOrdered 동등한 지 여부 decimalNumber의 값이 리시버보다 작 으면 NSOrderedDescending입니다.
배열 안의 개체 순서에 따라 정렬 방법이 결정됩니다. 예를 들어 person1.number < person2.number
인 경우 배열을 오름차순으로 정렬합니까? 내 코드 [person2Amount compare:person1Amount]
이 올바른 결과를 얻는 이유는 무엇입니까?
person2Amount is < person1Amount
처럼 보이며 따라서 내림차순으로 정렬하지만 person2Amount is > person1Amount
인 경우 정렬이 오름차순입니까?
내 이해가 옳지 않은 것처럼 보입니다.
감사합니다.
아직 이해가 안됩니다. 예제를 사용합시다. 위의 배열 [464.50, 457.20, 0, 1000]에 대해 오름차순 정렬을 원합니다. [number1 compare : number2]. 첫 번째 쌍은 [464.50 비교 : 457.20]입니다. 비교 방법을 살펴보면 self는 number1이므로 statement (self> number2)에서 464.50이 457.20보다 크기 때문에 true를 반환하고 NSOrderedDescending을 반환합니다. 그러나 [number1 compare : number2]는 배열을 오름차순으로 반환합니다. 그것이 내가 얻지 못하는 것입니다. 아마 단어에 연극이 있지만 그것은 나에게 혼란 스럽습니다. – okysabeni
@Yko 비교는 내림차순을 반환하고 배열은 항상 비교 자의 결과에 따라 오름차순을 사용하므로 내림차순으로 반환하면 배열 순서를 전환하도록 지시합니다. 정렬의 각 단계를 적어보십시오. 먼저 첫 번째 쌍을 비교하고 결과가 내림차순이면 전환하십시오. 스위칭을 멈출 때까지 쌍을 계속하십시오. – ughoavgfhw
"배열은 항상 비교 자의 결과에 따라 오름차순을 사용합니다"는 의미는 무엇입니까? 따라서 첫 번째 쌍은 number2> number1 이후 NSOrderedDescending을 반환합니다. 그런 다음 해당 비교자를 기반으로 배열은 오름차순으로 배열을 반환하므로 배열은이를 [number1 number2]와 같이 재정렬합니다. 내가 [person2 compare : person1]과 같이 설정하면 NSOrderedAscending을 반환합니다. "배열은 오름차순을 사용합니까"는 의미는 무엇입니까? 혼자서 떠나는 것은 이미 오름차순입니까? 그러면, 그것은 맞는 [person2 person1]이 될 것입니다. 내가 여기있는 결론을 확인해 주시겠습니까? – okysabeni