Сортировать NSMutuableArray - PullRequest
2 голосов
/ 09 июня 2011

У меня есть NSMutableArray, который загружен информацией из словаря ...

[self.data removeAllObjects];  
NSMutableDictionary *rows = [[NSMutableDictionary alloc] initWithDictionary:[acacheDB.myDataset getRowsForTable:@"sites"]];      
self.data = [[NSMutableArray alloc] initWithArray:[rows allValues]];      

В словаре строк есть две пары значений ключей.

Мне нужно отсортировать NSMutableArray self.data в алфавитном порядке.

Как это достигается ??

спасибо
Тони

Ответы [ 2 ]

4 голосов
/ 09 июня 2011

Если значения представляют собой простые строки, вы можете использовать следующее для создания отсортированного массива:

NSArray *sorted = [values sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
0 голосов
/ 09 июня 2011

Это должно сделать:

[self.data removeAllObjects];
NSArray *values = [[acacheDB.myDataset getRowsForTable:@"sites"] allValues];
NSSortDescriptor *alphaDescriptor = [[NSSortDescriptor alloc] initWithKey:@"DCFProgramName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
NSArray *sortedValues = [values sortedArrayUsingDescriptors:[NSMutableArray arrayWithObjects:alphaDescriptor, nil]];
[alphaDesc release];
[self.data addObjectsFromArray:sortedValues];
  1. Нет необходимости очищать NSMutableArray, если вы заменяете его вскоре после этого.
  2. Нет необходимости создавать дополнительныеNSMutableDictionary, если вы ничего не изменяете в нем.
  3. Нет необходимости создавать дополнительный NSMutableArray, если бы вы могли просто добавить значения к существующему.

Также: в вашем коде есть серьезные утечки памяти . (2x alloc + 0x release = 2x leak)

Редактировать : обновленный фрагмент кода для отражения обновления OP в структуре данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...