可以在排序中制作"caseInsensitiveCompare"等自定义比较器吗?

S.J*_*Lim 1 objective-c

我试图对一些数据进行排序以sortedArrayUsingDescriptors:NSArray类中使用方法.

该方法必须指示标准比较器,但我想指出自定义比较器我做了什么.

有可能吗?

这是我的排序代码的一部分:

NSSortDescriptor *firstDescriptor =
[[[NSSortDescriptor alloc]
  initWithKey:FIRSTNAME
  ascending:YES
  selector:@selector(CustomCompare:)] autorelease];
Run Code Online (Sandbox Code Playgroud)

CustomCompare: <=想要制作自定义比较器.

hig*_*ted 5

为什么不使用sortedArrayUsingComparator:和实现比较器不区分大小写?像这样的东西:

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

    return [str1 compare:str2 options:NSCaseInsensitiveSearch];
}];
Run Code Online (Sandbox Code Playgroud)

更新

对于更复杂的类,也可以使用多个比较字段:

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;
}];
Run Code Online (Sandbox Code Playgroud)