2010年

[iPhone] NSArray のソート方法 このエントリーを含むはてなブックマーク

iPhone/iPod touch Add comments

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のソート方法について

関連する投稿

5 Responses to “[iPhone] NSArray のソート方法”

  1. syuhari Says:

    [blog] [iPhone] NSArray のソート方法 http://is.gd/f3Iwo

    This comment was originally posted on Twitter

  2. twztest Says:

    Sun Limited Mt. – [iPhone] NSArray のソート方法 http://www.syuhari.jp/blog/archives/2231

    This comment was originally posted on Twitter

  3. erguolinge Says:

    メモ、後で読みます! “@syuhari: [blog] [iPhone] NSArray のソート方法 http://is.gd/f3Iwo”

    This comment was originally posted on Twitter

  4. NSArrayのソート方法 « iOS AppNote Says:

    [...] http://www.syuhari.jp/blog/archives/2231#more-2231 [...]

  5. 君にとっては明日の出来事 » [iOS]ソートの情報 Says:

    [...] 独自クラスをソート [...]

Leave a Reply

Additional comments powered by BackType

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン