私がやりたいことはかなり単純なようですが、Web 上で答えを見つけることができません。 のオブジェクトがあり、それらは「Person」オブジェクトであるとします。を、 である Person.birthDate でNSMutableArray
並べ替えたいです。NSMutableArray
NSDate
それはこの方法と関係があると思います:
NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(???)];
Java では、オブジェクトに Comparable を実装するか、インラインのカスタム比較演算子で Collections.sort を使用しますが、Objective-C ではこれをどうやって行うのでしょうか?
ベストアンサー1
比較方法
オブジェクトの比較メソッドを実装します。
- (NSComparisonResult)compare:(Person *)otherObject {
return [self.birthDate compare:otherObject.birthDate];
}
NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(compare:)];
NSSortDescriptor (より良い)
または通常はさらに良い方法:
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"birthDate"
ascending:YES];
NSArray *sortedArray = [drinkDetails sortedArrayUsingDescriptors:@[sortDescriptor]];
配列に複数のキーを追加することで、複数のキーで簡単に並べ替えることができます。カスタム比較メソッドの使用も可能です。ドキュメント。
ブロック(ピカピカ!)
Mac OS X 10.6 および iOS 4 以降では、ブロックを使用して並べ替えることもできます。
NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingComparator:^NSComparisonResult(Person *a, Person *b) {
return [a.birthDate compare:b.birthDate];
}];
パフォーマンス
-compare:
およびブロックベースの方法は、後者が KVC に依存しているため、一般的に を使用するよりもかなり高速になります。 この方法の主な利点は、コードNSSortDescriptor
ではなくデータを使用して並べ替え順序を定義する方法を提供することです。これにより、たとえば、ユーザーがヘッダー行をクリックしてNSSortDescriptor
並べ替えることができるように設定することが容易になります。NSTableView