2011-08-10 7 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]; 
}]; 

更新

を使用してもよい:sortedArrayUsingComparatorを使用しての

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

理由:mutisortことができています。 –

+1

@ user868754 - 複数のキーで並べ替えることを意味すると仮定すると、コンパレータで同じことを達成できます。 – highlycaffeinated

+0

クラスにさまざまなメンバ変数がある場合、複数の条件でソートできます。 –

関連する問題