Сортировка NSArray NSDates

У меня есть NSArray объектов NSDate, и я хочу сортировать их так, чтобы сегодня было 0, вчера в 1 и т.д.

Это восходящий или нисходящий, и я использую функцию, селектор или что?

2 ответа

Существуют разные методы сортировки для NSArray, потому что могут быть разные способы сортировки. NSSortDescriptors - это общий способ, который дает вам много возможностей в отношении того, какие ключи использовать при сортировке, какие селектора вы хотите использовать на этих клавишах, и общий порядок использования и т.д. Или вы можете использовать функции или блоки сравнения вместо этого, если ваш случай требует, чтобы это было удобнее для вашего конкретного случая.

Чтобы ответить на ваш первый вопрос, если вы хотите, чтобы сегодня было первым, а затем вчера, да, это, конечно, убывающий порядок.

Чтобы отсортировать несколько дат в порядке убывания, вы можете просто сделать это: (предполагая NSArray, полный NSDates, называемый dateArray):

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
NSArray *descriptors = [NSArray arrayWithObject: descriptor];
[descriptor release];
NSArray *reverseOrder = [dateArray sortedArrayUsingDescriptors:descriptors];

Или, если вы создаете для iOS 4+ или Snow Leopard +, вы можете сделать это:

NSArray *reverseOrderUsingComparator = [dateArray sortedArrayUsingComparator: 
 ^(id obj1, id obj2) {
 return [obj2 compare:obj1]; // note reversed comparison here
 }];


Попробуйте эту магию:

Сортировка массива дат в порядке возрастания.

то есть. даты, полученные позже и позже, или, говоря иначе, даты в будущее.

NSArray ascendingDates = [dates sortedArrayUsingSelector:@selector(compare:)];

Сортировка массива дат в порядке убывания. (что задал вопрос)

то есть. даты, полученные раньше и раньше, даты, идущие в прошлое, или по другому: сегодня индекс 0, вчера в индексе 1.

NSArray* descendingDates = [[[dates sortedArrayUsingSelector:@selector(compare:)] reverseObjectEnumerator] allObjects];

licensed under cc by-sa 3.0 with attribution.