@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 件のコメント:
参考になりました!すばらしい投稿をありがとうございます!
コメントを投稿