Сортировка элементов из plist в алфавитном порядке

У меня проблема с отображением данных, которые я извлекаю из своего "plist" в алфавитном порядке. Это строка, в которой я извлекаю некоторые данные из своего «plist» и отображаю их в своем tableView.

[self.objects addObjectsFromArray:[[NSDictionary dictionaryWithContentsOfFile:[[NSBundle 
mainBundle] pathForResource:@"Climb Data" ofType:@"plist"]] allKeys]];

Я знаю, что в Java это будет что-то вроде Collections.sort, но я не могу найти эквивалент в Objective-C.

Спасибо за любой вклад.


person user3669844    schedule 23.05.2014    source источник
comment
В документации NSArray есть раздел Сортировка...   -  person Martin R    schedule 23.05.2014
comment
Как мы знаем, NSDictionary не является упорядоченной структурой данных. Вы заглядывали в keysSortedByValueUsingSelector?   -  person raurora    schedule 24.05.2014
comment
Разве это не сравнение 2 объектов? Как бы вы сравнили видеть с буквами алфавита?   -  person user3669844    schedule 24.05.2014
comment
Предложение @raurora по использованию keysSortedByValueUsingSelector: тоже сработает и избавит вас от создания промежуточного несортированного массива. Вы бы передали ему селектор сравнения: или caseInsensitiveCompare:.   -  person Duncan C    schedule 24.05.2014


Ответы (1)


Не делайте так много вещей в одной строке кода. Это слишком усложняет понимание и отладку. Это также не делает код быстрее.

Сначала загрузите словарь.

Затем загрузите ключи в массив, используя allKeys.

THEN создайте отсортированную версию массива.

NSString *path = [[NSBundle mainBundle] pathForResource:@"Climb Data" ofType:@"plist"];
NSDictionary *dictionary =[NSDictionary dictionaryWithContentsOfFile: path];
NSArray *keysArray = [dictionary allKeys];

Последний шаг прост:

NSArray *sortedArray = [keysArray sortedArrayUsingSelector: @selector(compare:)];

Вы также можете использовать caseInsensitiveCompare:

Существуют также такие методы, как sortedArrayUsingComparator:, которые используют блок сравнения (блок кода, который вы предоставляете) для сортировки массива. Ваш блок кода представляет собой примитив, который сравнивает пары объектов в вашем массиве. Метод sort неоднократно вызывает ваш блок и использует результаты этих вызовов для сортировки массива.

person Duncan C    schedule 23.05.2014
comment
хм, я не знаю, знаю ли я, как сделать первые два шага отдельно - person user3669844; 24.05.2014
comment
Как ты не можешь? Вы умеете делать большие сложные утверждения, но не умеете делать простые? Вы просто копируете и вставляете код, который на самом деле не понимаете? В любом случае, я отредактировал свой ответ, чтобы кормить вас пошаговым кодом, что мне не нравится делать. - person Duncan C; 24.05.2014