2011-08-10 82 views
1

我試圖在NSArray類中對一些數據進行排序以使用sortedArrayUsingDescriptors:方法。可以在排序中自定義比較器如「caseInsensitiveCompare」嗎?

該方法必須指示標準比較器,但我想指出自定義比較器,我做了什麼。

可能嗎?

這裏是我的排序代碼部分:

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

CustomCompare: < =想要進行自定義比較。

回答

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

原因使用sortedArrayUsingComparator的:是可以mutisort。 –

+1

@ user868754 - 假設您的意思是按多個鍵排序,則可以在比較器中完成相同的操作。 – highlycaffeinated

+0

當一個類有多個成員變量時,可以按多個條件排序。 –

相關問題