2012-01-20 3 views
1

동적으로 채워지는 NSMutableDictionary가 있습니다. 그것은 다음과 같습니다NSMutableDictionary의 데이터 정렬

{ 
    SomeKey = 6; 
    AnotherKey = 2; 
    JustAnotherKey = 28; 
} 

나는이를 정렬 할 필요가있다, 그래서이 하나처럼 될 것입니다 :

{ 
    JustAnotherKey = 28; 
    SomeKey = 6; 
    AnotherKey = 2; 
} 

이를 달성하기 위해 어떤 방법이 있나요? 미리 감사드립니다.

답변

1

사전은 요소의 순서가 없음을 의미하는 정렬되지 않은 집합입니다. 따라서 "첫 번째 값"과 "두 값"의 첫 번째 개체를 삽입하더라도 " 두 번째 값 "이라면 키를 반복 할 때 임의의 순서로 가져올 수 있습니다 (예 :"2 "다음에"1 ").

그러나 원하는 모든 값이 정렬 된 순서이면, 당신은으로 정렬 한 후, 모든 키를 반복 값을 가져 오기 및 배열에 저장하고 있습니다.

NSArray *values=[myDict allValues]; 
NSMutableArray *sortedKeys=[[NSMutableArray alloc] init]; 
NSArray *sortedValues = [values sortedArrayUsingSelector:@selector(yourSelector)]; 
for (val in sortedArray){ 
    NSString *key=(NSString*)[[myDict allKeysForObject:val] objectAtIndex:0]; 
    [sortedKeys addObject:key] 
} 

이는의에 먼저 값을 얻기를위한 스타터 것 주문 된 주문 및 해당 키를 차례로 누릅니다. (어떤 오류 검사도하지 않으므로 OutOfIndex 예외에주의하십시오.)
이 코드의 효율성이 얼마나 좋을지 모르겠다. allKeysForObject은 모든 키를 반복 할 것이다.

+0

정렬 후 데이터와 동일한 순서로 키를 가져 오는 방법은 없습니까? 그래도 꽤 좋아 보인다 :-) – Robbietjuh

+0

실제로 그렇게 할 수있는 방법이있다. 나는 그것을 포함시킬 답을 편집했다. 좋은 대답을 수락하면 pls – aqs

+0

대단히 감사합니다. 코드를 약간 편집해야했고 완벽하게 작동했습니다.그냥 내가하고 싶은 걸! 객체를 정렬하고 키를 가져온 다음 동일한 순서로 배치합니다. – Robbietjuh

4

아니요, 죄송합니다.

NSDictionary는 키 정렬을 지원하지 않습니다. 직접 처리해야합니다.

사전에서 keys 배열을 가져 와서 정렬 한 다음 사전에서 값을 가져옵니다. 다음과 같음 :

NSArray *keys = [myDictionary allKeys]; 
NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(compare:)]; 

NSArray *values = [NSMutableArray array]; 
for (id key in sortedKeys) 
    [values addObject:[myDictionary objectforKey:key]]; 

이제 올바른 순서로 값이 지정됩니다.

그러나 이것은 상당히 많은 작업입니다. 정렬을 원한다면 배열로 배열을 저장하는 것으로 보겠습니다.

+0

추신 : 정렬하는 대신 키 배열을 뒤집으려면이 대답이 도움이 될 것입니다. http://stackoverflow.com/questions/586370/how-can-i-reverse-a-nsarray-in- objective-c – deanWombourne

+0

(열쇠의 초기 순서를 보장 할 수는 없지만, 사실 반전하면 아마도 원하는 것을 수행하지 못할 것입니다!) – deanWombourne

+0

사전의 객체를 주문하고 싶습니다. 예와 마찬가지로 키 순서가 마음에 들지 않습니다. 제공 한 코드에서 키를 정렬하고 배열에 넣습니다. 불행히도 그건 내 프로젝트에서 작동하지 않습니다. – Robbietjuh

1

NSMutableDictionary를 사용하는 대신 NSMutableArray를 사용하여 키 문자열이있는 속성과 값이있는 속성이 포함 된 고유 한 모델 클래스로 채울 것을 고려할 수 있습니다. NSMutableArray는 이러한 개체를 정렬하는 메서드를 제공합니다.

충분합니까?

관련 문제