2013-04-05 2 views
7

NSDictionary를 정렬하려고합니다. 당신이 사용할 수있는 참조 Apple docs에서NSDictionary를 내림차순으로 내림차순으로 정렬합니다. `compare : options :`selector를 사용하여 옵션을 보내는 방법은 무엇입니까?

keysSortedByValueUsingSelector : 제공

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithInt:63], @"Mathematics", 
    [NSNumber numberWithInt:72], @"English", 
    [NSNumber numberWithInt:55], @"History", 
    [NSNumber numberWithInt:49], @"Geography", 
    nil]; 

NSArray *sortedKeysArray = [dict keysSortedByValueUsingSelector:@selector(compare:)]; 

:

// sortedKeysArray contains: Geography, History, Mathematics, English 

하지만 내가 원하는 :

// sortedKeysArray contains: English, Mathematics, History, Geography 

난 당신이 compare:options:를 사용할 수 읽었습니다 및 NSStringCompareOptions을 입력하여 계정을 변경하십시오. 다른 방향으로 비교할 수 있습니다.

그러나 선택자에서 옵션을 사용하여 compare:options:을 보내는 방법을 이해하지 못합니다.

NSArray *sortedKeysArray = [dict keysSortedByValueUsingSelector:@selector(compare:options:NSOrderDescending)]; 

는 어떻게 비교의 순서를 전환해야합니다 :

나는 이런 일을하고 싶지?

관련 : https://discussions.apple.com/thread/3411089?start=0&tstart=0

+0

'NSArray를 * ascedingArray = [[sortedKeysArray reverseObjectEnumerator] allObjects]' –

답변

4

내가 사용

NSSortDescriptor *sortOrder = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:NO]; 
    self. sortedKeys = [[self.keyedInventoryItems allKeys] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortOrder]]; 
+0

이 답변은 잘못된 것입니다. 사전의 값을 참조하지 않고 키를 내림차순으로 정렬합니다. @ noa의 대답은 올바른지 비교기를 사용합니다. – Jon

13

옵션 1 : 사용 비교기는 반대로 -compare:를 호출 : (! 감사 단 셸리)

NSArray *blockSortedKeys = [dict keysSortedByValueUsingComparator: ^(id obj1, id obj2) { 
    // Switching the order of the operands reverses the sort direction 
    return [objc2 compare:obj1]; 
}]; 

그냥 내림차순 및 오름차순 return 문을 역순으로하면 사용자가 원하는 내용을 가져와야합니다. 개미.

옵션 2 : 당신이 가지고있는 배열을 역는 :

참조 How can I reverse a NSArray in Objective-C?

+0

또는 [dict keysSortedByValueUsingComparator :^NSComparisonResult (id obj1, id obj2) { return [obj2 compare : obj1]; }]]; –

+0

배열을 뒤집지는 않겠지 만,'return - [objc2 compare : obj1]'가 작동 할 수도 있습니다. – paulmelnikow

+0

간단한 예제를 통해 테스트 해 봤는데 ..., 비교 기반 정렬에서 비교 순서를 뒤집 으면 결과 배열이 바뀐다. –

관련 문제