[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
2022-03-17 01:25:34
質問
やりたいことは簡単そうなのですが、ウェブで調べても答えが見つかりません。私は
NSMutableArray
のオブジェクトで、仮にそれらが「Person」オブジェクトだとします。をソートしたいのです。
NSMutableArray
であるPerson.birthDateが
NSDate
.
このメソッドと関係があるのだと思います。
NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(???)];
Javaでは、私のオブジェクトにComparableを実装させるか、インラインのカスタムコンパレータでCollections.sortを使用することになります。
解決方法は?
比較方法
オブジェクトにcompare-methodを実装するかどうか。
- (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]];
配列に複数のキーを追加することで、簡単に複数のキーでソートすることができます。カスタムの comparator-methods を使用することも可能です。以下の例を見てください。 ドキュメント .
ブロック(ピカピカ)
Mac OS X 10.6とiOS 4から、ブロックでのソートも可能になりました。
NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingComparator:^NSComparisonResult(Person *a, Person *b) {
return [a.birthDate compare:b.birthDate];
}];
パフォーマンス
は
-compare:
とブロックベースのメソッドを使用した場合、一般的に
NSSortDescriptor
後者はKVCに依存しているので。 の主な利点は
NSSortDescriptor
メソッドは、コードではなくデータを使ってソート順を定義する方法を提供することです。
NSTableView
ヘッダー行をクリックすることで
関連
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] カスタムオブジェクトのArrayListをプロパティでソートする
-
[解決済み] オブジェクトの属性に基づいてオブジェクトのリストを並べ替えるには?
-
[解決済み] iOS 13 のフルスクリーンでモーダルを表示する
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】オブジェクトの配列をプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
iOS classic error Undefined symbols for architecture XXX:
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] Xcode 7のエラーです。"Missing iOS Distribution signing identity for ..." (iOS配布用署名IDがありません)
-
[解決済み] 文字列の長さを取得する
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] コア・データ エンティティの全インスタンスを削除する最短の方法
-
[解決済み] Swiftで配列に要素を追加する