@syuhariさんの記事も参考しました。
[iPhone] NSArray のソート方法
確かに出来ましたが、なんか面倒な気がしますね。
別の方法がないかと思って、調べると、sortedArrayUsingDescriptorsを使うと、より楽になりそうです。
下記の属性を持っているTaskを格納するNSArrayとします。
@property (nonatomic, retain) NSNumber *dispNumber; @property (nonatomic, retain) NSString *text; @property (nonatomic, retain) NSDate *dueDate;
データを用意する
ソートを実行する
NSMutableArray *testArray = [NSMutableArray array]; Task *task1 = [[Task alloc] init]; task1.dispNumber = [NSNumber numberWithInt:1]; task1.text = @"D"; task1.dueDate = [NSDate dateWithTimeIntervalSince1970:400000]; [testArray addObject:task1]; Task *task2 = [[Task alloc] init]; task2.dispNumber = [NSNumber numberWithInt:1]; task2.text = @"A"; task2.dueDate = [NSDate dateWithTimeIntervalSince1970:200000]; [testArray addObject:task2]; Task *task3 = [[Task alloc] init]; task3.dispNumber = [NSNumber numberWithInt:2]; task3.text = @"E"; task3.dueDate = [NSDate dateWithTimeIntervalSince1970:100000]; [testArray addObject:task3]; Task *task4 = [[Task alloc] init]; task4.dispNumber = [NSNumber numberWithInt:4]; task4.text = @"C"; Task *task5 = [[Task alloc] init]; task5.dispNumber = [NSNumber numberWithInt:1]; task5.text = @"B"; task5.dueDate = [NSDate dateWithTimeIntervalSince1970:500000]; [testArray addObject:task5];
ソートを実行する
NSSortDescriptor *sortDispNo = [[NSSortDescriptor alloc] initWithKey:@"dispNumber" ascending:YES]; NSSortDescriptor *sortText = [[NSSortDescriptor alloc] initWithKey:@"text" ascending:NO]; NSArray *sortDescArray = [NSArray arrayWithObjects:sortDispNo, sortText, nil]; [testArray sortedArrayUsingDescriptors:sortDescArray];
実行結果は、こうなっています。
2010-09-12 16:24:57.096 ArraySortTest[624:207] ソート前 2010-09-12 16:24:57.098 ArraySortTest[624:207] DispNo : 1 Text : D DueDate : 0045-01-05 15:06:40 GMT 2010-09-12 16:24:57.099 ArraySortTest[624:207] DispNo : 1 Text : A DueDate : 0045-01-03 07:33:20 GMT 2010-09-12 16:24:57.099 ArraySortTest[624:207] DispNo : 2 Text : E DueDate : 0045-01-02 03:46:40 GMT 2010-09-12 16:24:57.100 ArraySortTest[624:207] DispNo : 4 Text : C DueDate : 0045-01-04 11:20:00 GMT 2010-09-12 16:24:57.101 ArraySortTest[624:207] DispNo : 1 Text : B DueDate : 0045-01-06 18:53:20 GMT 2010-09-12 16:24:57.101 ArraySortTest[624:207] ソート後 2010-09-12 16:24:57.102 ArraySortTest[624:207] DispNo : 1 Text : D DueDate : 0045-01-05 15:06:40 GMT 2010-09-12 16:24:57.102 ArraySortTest[624:207] DispNo : 1 Text : B DueDate : 0045-01-06 18:53:20 GMT 2010-09-12 16:24:57.107 ArraySortTest[624:207] DispNo : 1 Text : A DueDate : 0045-01-03 07:33:20 GMT 2010-09-12 16:24:57.108 ArraySortTest[624:207] DispNo : 2 Text : E DueDate : 0045-01-02 03:46:40 GMT 2010-09-12 16:24:57.109 ArraySortTest[624:207] DispNo : 4 Text : C DueDate : 0045-01-04 11:20:00 GMT
1 件のコメント:
参考になりました!すばらしい投稿をありがとうございます!
コメントを投稿