[iPhone] NSArray のソート方法
NSArray 内のオブジェクトの指定したメンバ変数でソートする方法です。
NSArray に複数の Book クラスが入っているとします。Book クラスは以下のようなメンバ変数を持っています。
@interface Book: NSObject { NSInteger no; NSString* furigana; NSDate* publish_date; }
ソートするには NSArray 内のオブジェクトに NSComparisonResult を返すメソッドを作り、そのメソッド内で比較をします。
数値でのソート
数値での比較は単純に比較をしてその結果により NSComparisonResult を返します。下記の例は降順にソートしています。昇順にソートしたいときは NSOrderedAscending と NSOrderedDescending を逆にすれば OK です。
- (NSComparisonResult) compareNo:(Book*)_book { if (self.no > book.no) { return NSOrderedAscending; } else if (self.no < _book.no) { return NSOrderedDescending; } else { return NSOrderedSame; } }
ソートするときには以下のようにします。
books = [books sortedArrayUsingSelector:@selector(compareNo:)];
文字でのソート
文字でのソートは NSString クラスの localizedCaseInsensitiveCompare: を使用します。localizedCompare: でもかまいませんが、localizedCaseInsensitiveCompare: の方は大文字、小文字を区別せずに辞書的なソートをしてくれます。
- (NSComparisonResult) compareFurigana:(Book*)_book { return [self.furigana localizedCaseInsensitiveCompare:_book.furigana]; }
日付でのソート
日付でのソートは NSDate の compare: を使用します。昇順、降順は self.publish_date と _book.publish_date を入れ替えれば変えられます。
- (NSComparisonResult) comparePublishDate:(Book*)_book { return [self.publish_date compare:_book.publish_date]; }
追記 [ 9/13 ]
@erguolinge さんに twitter で sortedArrayUsingDescriptors: を使えばもっと簡単にソートできることを教えていただきました。以下の記事をご参考ください。ありがとうございました!
蒼い惑星: NSArrayのソート方法について
関連する投稿
10 comments
コメントをどうぞ
Additional comments powered by BackType
[blog] [iPhone] NSArray のソート方法 http://is.gd/f3Iwo
This comment was originally posted on Twitter
Sun Limited Mt. – [iPhone] NSArray のソート方法 http://www.syuhari.jp/blog/archives/2231
This comment was originally posted on Twitter
メモ、後で読みます! “@syuhari: [blog] [iPhone] NSArray のソート方法 http://is.gd/f3Iwo”
This comment was originally posted on Twitter
[...] http://www.syuhari.jp/blog/archives/2231#more-2231 [...]
[...] 独自クラスをソート [...]
[...] Sun Limited Mt.「NSArray のソート方法」 [...]
[...] [iPhone] NSArray のソート方法 [...]
[...] Sun Limited Mt.「NSArray のソート方法」 [...]
Best Shared Proxy…
NSArray 内ã?®ã?ªã??ã?¸ã?§ã?¯ã??ã?®æŒ‡å®šã??ã?Ÿã?¡ã??ã??変æ?°ã?§ã??ã??ã??ã?™ã??æ??æ??ã?§ã?™ã?? NSArray ã??複æ?°ã?® Book…
1strengthening…
…