一連の NSArray オブジェクトとして保存している JSON として日付/時刻を取得しています。
JSON 形式は次のとおりです。
"created_at" = "2012-09-21T12:41:26-0500"
最新のアイテムが一番上になるように配列をソートするにはどうすればよいですか。
ありがとうございました
最初に行う必要があるのは、日付文字列を元の配列内のすべてのアイテムのオブジェクトに変換することですNSDate
。システムは日付を比較する方法を認識していますが、ISO8601 文字列は認識していないため、これが重要です。
変換を行うにはいくつかの方法があります。次の例では、NSDate でカスタム カテゴリを使用しています。この質問への回答を変換に使用できます。ISO8601 タイムスタンプをフォーマットされた NSDate に変換する簡単な方法はありますか? 、
を取得すると、次のようNSDates
に を使用して並べ替えが非常に簡単になります。NSSortDescriptor
NSArray *originalArray = @[
@{@"created_at" : [NSDate dateFromISO8601String:@"2012-09-21T12:41:26-0500"]},
@{@"created_at" : [NSDate dateFromISO8601String:@"2012-07-21T12:41:26-0500"]},
@{@"created_at" : [NSDate dateFromISO8601String:@"2012-06-21T12:41:26-0500"]},
@{@"created_at" : [NSDate dateFromISO8601String:@"2012-10-21T12:41:26-0500"]}
];
NSSortDescriptor *sortDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"created_at" ascending:NO];
NSArray *sortedArray =
[originalArray sortedArrayUsingDescriptors:@[sortDescriptor]];
この変数sortedArray
には、元の配列のソート済みバージョンが含まれています。ご覧のとおり、ソート記述子の配列を渡します。これにより、複数のソート記述子を渡すことができます。これにより、日付と別のプロパティ (たとえば、タイトル、名前) を二次記述子として使用します。