Сортировка строк в Юникоде - PullRequest
1 голос
/ 02 августа 2010

Как отсортировать строки Unicode (иностранные) в приложении для iPhone?

Ответы [ 3 ]

3 голосов
/ 02 августа 2010

Все строки в Objective-C (NSString *) являются строками Unicode. Они представляют собой последовательности символов Юникода (в отличие от последовательностей закодированных байтов). Вы можете отсортировать массив строк, используя методы, предоставленные NSArray.

NSArray* myArray = [NSArray arrayWithObjects:@"はじめまして", @"русский язык", @"คนอ้วน ๆ", nil];

NSArray* mySortedArray = [myArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

Это позволит отсортировать строки по их порядку в Юникоде, если у вас есть какие-то другие условия сортировки, тогда предоставьте пользовательский селектор сортировки или уточните свой вопрос.

1 голос
/ 02 августа 2010

Спасибо, что помогли мне.

localizedCaseInsensitiveCompare

этот API будет выполнять сортировку по локализации.В противном случае строки разных языков будут обрабатываться как строки Юникода, и сравнение не удастся.

Вот решение:

NSComparisonResult sortLocationsForStr(NSString* str1, NSString* str2, void *context)
{
    return [str1 localizedCaseInsensitiveCompare:str2];
}

[myArrayToSort sortUsingFunction:sortLocationsForStr context:nil];
1 голос
/ 02 августа 2010

Если вы хотите сортировать, используя дескрипторы сортировки, вы также можете сортировать так:

NSSortDescriptor *sorter = [NSSortDescriptor descriptorWithKey:@"description" ascending:YES];
NSArray* mySortedArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]];

«описание» работает нормально как ключ для значений NSString, так как описание задокументировано, чтобы возвращать себя.

Преимущество использования маршрута NSSortDescriptor заключается в том, что у вас может быть более одного дескриптора сортировки или вы можете выбрать вместо него использовать сортировку по убыванию.

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