2013-05-07 2 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

+0

Это действительно. Ключ NSNumber и значение NSNumber количества раз, которое оно появилось в массиве. – soleil

+0

Теперь я не могу отредактировать свой комментарий, это действительно так, но его удобство использования было бы трудным, если бы вы сохранили этот путь. Ключи вашего словаря всегда должны быть известны. С помощью этой структуры вы всегда можете сортировать дескрипторы и находить число с предикатом. – Anupdas

ответ

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]; 
} 
Смежные вопросы