2013-12-14 3 views
-3

Привет, я работаю над функцией сортировки в своем приложении. в котором я столкнулся с странной проблемой, я надеюсь получить помощь.Сортировка NSMutableDictionary по имени

Пожалуйста, проверьте данные примера следующим образом: (NSMutableDictionary)

{ 
NameArray =  (
     kniteman, 
     Acrix, 
     Bahel, 
     Mayur, 
     vasel, 
     Mayur 
    ); 
    NoArray =  (
     3261, 
     1800, 
     3366, 
     4000, 
     1099, 
     1999 
    ); 

Теперь выше Словарь данных я показал результаты NSLog.

Я хочу отсортировать этот словарь с помощью NameArray key.

Любые подсказки или рекомендации будут высоко оценены.

Спасибо заранее.

+0

У вас есть словарь, который содержит массивы и вы хотите отсортировать один из массивов? Потому что вы не можете сортировать словарь. – Wain

+0

@Wain Я хочу отсортировать весь словарь на основе NameArray. Это означает, что значение NoArray также будет сортироваться в соответствии с NameArray. – Mayur

+5

Тогда вы не должны использовать словарь. У вас должен быть массив словарей, где каждый словарь содержит ваши 2 ключа с соответствующими (связанными) значениями. – Wain

ответ

1

Вы не можете отсортировать словарь по словарям, по определению, не иметь порядка. Вместо этого вам понадобится массив словарей. Это всегда будет поддерживать имя и числовые значения. Если у вас есть как NameArray и NoArray загружены в NSArrays и они находятся в том же порядке, вы можете загрузить их в массив словарей так:

NSMutableArray *list = [NSMutableArray array]; 

// check for equal counts to avoid error 
if ([NameArray count] == [NoArray count]) 
{ 
    NSUInteger count = [NameArray count]; 

    // loop through and add an NSDictionary for each item 
    for (NSUInteger i; i < count; i++) 
    { 
     [list addObject:@{@"name" : [NameArray objectAtIndex:i], 
         @"number": [NoArray objectAtIndex:i]}]; 
    } 
} 

Массив словарей теперь может быть отсортирован следующим образом:

NSSortDescriptor *nameDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES] autorelease]; 

NSArray *sortedArray = [list sortedArrayUsingDescriptors:@[nameDescriptor]]; 
[list setArray:sortedArray]; 
+0

Сделано с помощью вашего решения. – Mayur

Смежные вопросы