2013-05-07 62 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]; 
}