忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

NSArray内の自然ソートについて

わか

iOSのNSArrayソートに関して備忘録を記載します。
NSArrayにおいて自然ソート(Finderと同じソート)するにはlocaliezedStandardCompareを使用すれば可能です。

 
NSSortDescriptor *sortDescName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO
                             selector:@selector(localizedStandardCompare:)];
NSMutableArray *sortDescArray = [NSMutableArray arrayWithObjects:sortDescName, nil];

NSMutableArray *sortArray = [sortArray sortedArrayUsingDescriptors:sortDescArray];
ただ、localiezedStandardCompareはNSArray内のNSDictionaryやNSStringオブジェクトなどをソートできますが、NSArray 内のNSArrayはソートできません。

NSArray 内のNSArrayをlocaliezedStandardCompareと同じようにソートするには以下のようにします。
NSInteger sortFileName(id string1, id string2, void *context) {

    NSMutableArray *str1 = string1;
    NSMutableArray *str2 = string2;
    
    return [[str1 objectAtIndex:0] compare:[str2 objectAtIndex:0] options:(NSCaseInsensitiveSearch | NSNumericSearch |
                                                                           NSWidthInsensitiveSearch | NSForcedOrderingSearch)];
}
sortArray = [sortArray sortedArrayUsingFunction:sortFileName context:nil];

objectAtIndexでNSArray内のソートしたい項目を選べばよいです。
同じ事がAppleの公式ドキュメントにも記載されていますが、忘れないように記載しました。

拍手[0回]

PR