Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sorting an NSArray of NSDates

I have an NSArray of NSDate objects and I want to sort them so that today is at 0, yesterday at 1 etc.

Is it ascending or descending, and do i use a function, selector or what?

like image 818
Jonathan. Avatar asked Dec 04 '10 17:12

Jonathan.


1 Answers

There are different sort methods for NSArray because there may be different ways you want to sort things. NSSortDescriptors are a general way that give you a lot of options as far as what keys to use in sorting, what selectors you want to use on those keys, and overall order to use, etc. Or you can use functions or comparator blocks instead if your case requires that or if that's more convenient for your particular case.

To answer your first question, if you want today to be first, followed by yesterday then, yes, that is of course descending order.

To sort some dates in descending order you can just do this: (assuming an NSArray full of NSDates called 'dateArray'):

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

NSArray *reverseOrder = [dateArray sortedArrayUsingDescriptors:descriptors];

Or, if you are building for iOS 4+ or Snow Leopard+ you can do this:

NSArray *reverseOrderUsingComparator = [dateArray sortedArrayUsingComparator: 
                                       ^(id obj1, id obj2) {
                                           return [obj2 compare:obj1]; // note reversed comparison here
                                       }];
like image 92
Firoze Lafeer Avatar answered Oct 12 '22 01:10

Firoze Lafeer