Может ли в сортировке сделать пользовательский компаратор типа caseInsensitiveCompare? - PullRequest
1 голос
/ 11 августа 2011

Я пытаюсь отсортировать некоторые данные для использования метода sortedArrayUsingDescriptors: в классе NSArray.

Этот метод должен указывать стандартный компаратор, но я хочу указать пользовательский компаратор, что я делаю.

Возможно?

Вот часть моего кода сортировки:

NSSortDescriptor *firstDescriptor =
[[[NSSortDescriptor alloc]
  initWithKey:FIRSTNAME
  ascending:YES
  selector:@selector(CustomCompare:)] autorelease];

CustomCompare: <= хочу сделать пользовательский компаратор. </p>

1 Ответ

5 голосов
/ 11 августа 2011

Почему бы не использовать sortedArrayUsingComparator: и не использовать регистр без учета регистра?Примерно так:

NSArray *sortedArray = [myArray sortedArrayUsingComparator:^(id o1, id o2) {
    NSString *str1 = (NSString *)o1;
    NSString *str2 = (NSString *)o2;

    return [str1 compare:str2 options:NSCaseInsensitiveSearch];
}];

update

Для более сложных классов также можно использовать несколько полей сравнения:

NSArray *sortedArray = [myArray sortedArrayUsingComparator:^(id o1, id o2) {
    MyClass *cl1 = (MyClass *)o1;
    MyClass *cl2 = (MyClass *)o2;

    NSComparisonResult result = [cl1.primaryString compare:cl2.primaryString options:NSCaseInsensitiveSearch];
    if (result == NSOrderedSame) {
        result = [cl1.secondaryString compare:cl2.secondaryString options:NSCaseInsensitiveSearch];        
    }
    return result;
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...