2013-05-07 107 views
0

我迷失在排序描述符,字典和計數集的海洋中。希望有人能幫助我找到一個更簡單的方法。按對象在該數組中出現的次數對數組排序

與排序後的數組像這樣(的NSNumbers)開始:

['7','7','7','5','5','5','5','5','5','3','2','2','2','2'] 

我想用字典的有序數組,看起來像這樣結束了:

{'5','6'} //the number 5 appeared 6 times 
{'2','4'} //the number 2 appeared 4 times 
{'7','3'} //the number 7 appeared 3 times 
{'3','1'} //the number 3 appeared 1 time 
+0

您提到的字典是無效的你想要嗎? '{@「Number」:5,@「Repeat」:6}' – Anupdas 2013-05-07 17:55:02

+0

它是有效的。關鍵是NSNumber,並且該值是它在數組中出現次數的NSNumber。 – soleil 2013-05-07 18:00:49

+0

我現在無法編輯我的評論,這是有效的,但如果您以這種方式存儲它的可用性將很困難。你的字典的鑰匙應該總是知道。有了這個結構,你總是可以用描述符排序並用謂詞找到一個數字。 – Anupdas 2013-05-07 18:09:20

回答

5

這裏是一個片段根據NSCountedSet

NSArray *numbers = @[@7,@7,@7,@5,@5,@5,@5,@5,@5,@3,@2,@2,@2,@2]; 

NSCountedSet *countedSet = [NSCountedSet setWithArray:numbers]; 

NSMutableDictionary *result = [NSMutableDictionary dictionary]; 
for (NSNumber *num in countedSet) { 
    NSUInteger c = [countedSet countForObject:num]; 
    [result setObject:@(c) forKey:num]; 
}