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

时间:2011-08-10 20:12:25

标签: objective-c

我尝试对某些数据进行排序,以便在sortedArrayUsingDescriptors:类中使用NSArray方法。

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

有可能吗?

以下是我的排序代码的一部分:

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

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

1 个答案:

答案 0 :(得分:5)

为什么不使用sortedArrayUsingComparator:并将比较器实现为不区分大小写?像这样:

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

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

<强>更新

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

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;
}];