2011-08-05 4 views
0

오케. 거래는 다음과 같습니다. NSMutualDictionary에 단어를 키로 사용합니다 (이름을 말합니다). 값 개체는 NSNumber입니다 (등급과 유사).개체별로 NSMutableDictionary 키를 정렬 하시겠습니까?

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 
[dictionary setObject:[NSNumber intValue:1] forKey:@"Melvin"]; 
[dictionary setObject:[NSNumber intValue:2] forKey:@"John"]; 
[dictionary setObject:[NSNumber intValue:3] forKey:@"Esben"]; 

먼저 등급을 최상으로 정렬하고 싶습니다.

은 내가 이런 식으로 그것을 할거야 알고

[searchWords keysSortedByValueUsingSelector:@selector(intCompare:)]; 

그러나 intCompare을 구현하는 방법을 잘. (비교 방법)

아무도 올바른 방향으로 나를 가리킬 수 있습니까?

- (NSComparisonResult) intCompare:(NSString *) other 
{ 
//What to do here? 
} 

나는 {Esben, 존, 멜빈}와 함께있는 NSArray을 싶어.

답변

1

당신이 사전에 넣어 객체이기 때문에 NSNumber 인스턴스의 경우 메소드 서명을 조금 변경해야합니다. 그러나 전체 구현은 정말 간단하다

-(NSComparisonResult)intCompare:(NSNumber*)otherNumber { 
    return [self compare:otherNumber]; 
} 

은 사실 나는 당신이 compare:NSNumber 것을 이미 가지고 갈 수있을 때, 자신의 intCompare: 방법을해야 할 이유에 이유를 볼 수 없습니다.

+0

예, 맞습니다. 나는 NSString 만 비교했다는 인상을 받았다. 하지만 NSNumber도 그렇게해야하기 때문에 그렇게해야합니다. 이제 어떻게 A의 끝 또는 내림차순을 설정합니까? – esbenr

+0

질문이 하나 더 있습니다. selector (compare :)를 사용하여 dict를 객체별로 정렬하지만 가장 낮은 값부터 정렬합니다. 그가 방향을 바꾸려면 어떻게해야합니까? – esbenr

+1

@esbenr - 직접적인 지원은 없습니다. 그러나'- [NSDictionary keysSortedByValueUsingComparator :]'를 사용하여 자신만의 비교를 할 수 있습니다. – PeyloW

1
These constants are used to indicate how items in a request are ordered. 

enum { 
    NSOrderedAscending = -1, 
    NSOrderedSame, 
    NSOrderedDescending 
}; 
typedef NSInteger NSComparisonResult; 

이것은 데이터 유형에 대한 Apple의 개발 문서에서 가져온 것입니다. 이제는 어느 것이 더 큰지 확인해야합니다. 이것 모두는 당신을 위해 행해진 다. 간단히 @selector (비교 :)를 전달하면됩니다. 당신의 값은 NSNumber이고 NSNumber는 compare : 함수를 구현합니다. 당신이 :)

+0

1pt PeyloW :-) – esbenr

1
NSArray *sortedArray = [searchWords sortedArrayUsingSelector:@selector(compare:) ]; 

를 원하거나 당신이 아니라 사용 수있는 것입니다 어느, 여기 intCompare 선택의 구현입니다

- (NSComparisonResult) intCompare:(NSString *) other 
{ 
    int myValue = [self intValue]; 
    int otherValue = [other intValue]; 
    if (myValue == otherValue) return NSOrderedSame; 
    return (myValue < otherValue ? NSOrderedAscending : NSOrderedDescending); 

}

+0

다른 사람에게 도움이 될 수 있도록 답을 받아 들여야합니다. –

+0

나는 하나의 대답 (나는 규칙을 만들지 않았다)과 PeyloW의 대답 만 수락 할 수 있습니다. 내 질문을 해결했다. – esbenr

관련 문제