Сортировка NSArray с использованием (несколько?) Критериев - возрасты менее 10 упорядочены неправильно - PullRequest
0 голосов
/ 25 июля 2011

Мне нужно отсортировать массив возрастных групп. Задача состоит в том, что любые возрастные группы менее чем на 10 сортируют выше, чем те, которые 10-19 лет при использовании стандартного NSArray localizedCaseInsensitiveCompare

В частности, вот пример того, как может выглядеть мой несортированный массив:

( "17-18", "13-14", "8 и Под", "Женщины", "Мужчины", "15-16" )

После сортировки я бы захотел бы , чтобы это выглядело так:

( "8 и Под", "13-14", "15-16", "17-18", "Мужчины", "Женщины" )

Но в конечном итоге это выглядит примерно так:

( "13-14", "15-16", "17-18", "8 и Под", "Мужчины", "Женщины" )

Используется следующий код:

    NSArray *sortedAgeArray = [ageArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

Мне нравится, что "Мужчины" и "Женщины" заканчиваются, вот чего я хочу. Но есть ли умный / эффективный способ справиться с возрастом менее 10 лет? Переформатировать мои данные, чтобы включить ведущие нули, не вариант.

Я знаю, что могу написать собственную функцию сортировки, но я стараюсь не делать этого.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Вы можете использовать localizedStandardCompare: вместо localizedCaseInsensitiveCompare:. Это то, что использует Finder, и он достаточно умен, чтобы оценить «8» как «13» без начальных нулей.

0 голосов
/ 25 июля 2011

Вам нужно либо добавить начальные нули, либо написать пользовательскую функцию.

Или вы можете добавить весь «ключ сортировки» впереди, разделенный символом, таким как «:». Например, "17: 17-18", "08: 8 и ниже", "W: Women" и т. Д. Затем используйте, например, NSString :: componentsSeparatedByString, чтобы отделить ключ сортировки, прежде чем использовать оставшуюся часть строки в представление.

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