【Objective-C】配列の並び順変更

数値ファイル名のソートにはまったのでメモ

名前が数値となるファイル名を取得し、配列に入れると
1.csv
10.csv
2.csv

のように並ばれてしまう。

 

最初はsortedArrayUsingSelectorを使用していたが
NSArray *listafter = [list sortedArrayUsingSelector:@selector(compare:)];

並び順に変化がなかったので

そこでオブジェクトを作成し、ソート用の数値項目でソートすることで
想定した並び順となった。

 

ソースは下記

@interface SubItems : NSObject
@property (nonatomic,assign) long no;
@property (nonatomic,strong) NSString *name;
@end

@implementation SubItems
@end

- (void)sortList{

    long tmpcnt;
    NSString *tmpname;
    NSMutableArray *sortarray = [NSMutableArray array];

    for (NSString *tmpcsv in list) {
    SubItems *subItems = [[SubItems alloc] init];

        tmpname = [tmpcsv stringByDeletingPathExtension];
        tmpcnt = tmpname.longLongValue;

        subItems.no = tmpcnt;
        subItems.name = tmpcsv;
        [sortarray addObject:subItems];
    }

    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"no" ascending:YES];
    NSArray *sortarrayafter = [sortarray sortedArrayUsingDescriptors:@[sort]];

    NSMutableArray *listafter = [NSMutableArray array];
    for (SubItems *subItems in sortarrayafter) {
        [listafter addObject:subItems.name];
        NSLog(@"sorted subItems = %@",subItems.name);
    }
    NSLog(@"sorted list = %@",listafter);
}
タイトルとURLをコピーしました