web-dev-qa-db-ja.com

オブジェクトのプロパティによるNSMutableArrayの並べ替え

したがって、これはカスタムオブジェクトのNSMutableArrayをソートする最良の方法に関するかなり基本的な質問です。

カスタムオブジェクトのNSMutableArrayがあり、各オブジェクトにはNSStringNSDateが一緒になっています。私は配列を最新のオブジェクト(したがって最新のNSDate)でソートする必要があります。これがNSDateの配列である場合は、単にNSDate compare: NSDateを使用できると確信しています。しかし、日付だけでなくすべてのオブジェクトを並べ替える必要があるため、そのメソッドを使用できるかどうかはわかりません。

疑似コードの観点から、私は次のことを行う必要があります。個々のオブジェクトを見て、現在のオブジェクトのNSDateが配列で2番目に大きいかどうかを判別し、そうである場合は、日付だけでなくオブジェクトを移動します。

繰り返しますが、これは非常に基本的であるため、尋ねるのをためらっていましたが、オブジェクトの配列を検索して、基本的に必要なことを実行する既存のクラスメソッドがある場合は、かなり非効率的なメソッドを書きたくありませんサブプロパティを作成し、サブプロパティに従ってオブジェクトを並べ替えます。

助けてくれてありがとう。

40
Rich Haygren

NSSortDescriptors sを使用すると、これが非常に簡単になります。 NSMutableArrayでは、sortUsingDescriptors:を使用して既存の配列を並べ替えることができ、不変の配列では、sortedArrayUsingDescriptors:を使用して新しい配列を作成できます

//This will sort by stringProperty ascending, then dateProperty ascending
[mutable_array sortUsingDescriptors:
 @[
  [NSSortDescriptor sortDescriptorWithKey:@"stringProperty" ascending:YES],
  [NSSortDescriptor sortDescriptorWithKey:@"dateProperty" ascending:YES]
  ]];
87
Joe

この小さなスニペットは私にとってはうまくいきました:

[students sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]];
19
funroll