Hihi all,
I have an NSMutableArray containing various NSDictionary. In each of the NSDictionary, I have two key-value-pairs, eg: username and loginDate.
I would need to sort all NSDictionary in this NSMutableArray based on loginDate descending and username ascending.
Just to illustrate in more details:
NSMutableArray (index 0): NSDictionary -> username:"user1", loginDate:20 Dec 2011
NSMutableArray (index 1): NSDictionary -> username:"user2", loginDate:15 Dec 2011
NSMutableArray (index 2): NSDictionary -> username:"user3", loginDate:28 Dec 2011
NSMutableArray (index 3): NSDictionary -> username:"user4", loginDate:28 Dec 2011
After the sorting, the result in the array should be:
NSMutableArray (index 0): NSDictionary -> username:"user3", loginDate:28 Dec 2011
NSMutableArray (index 1): NSDictionary -> username:"user4", loginDate:28 Dec 2011
NSMutableArray (index 2): NSDictionary -> username:"user1", loginDate:20 Dec 2011
NSMutableArray (index 3): NSDictionary -> username:"user2", loginDate:15 Dec 2011
How can I achieve this? Have gone through some of the sortUsingComparator method, can't figure out a way for this.
Maybe something like this?
[array sortUsingDescriptors:
[NSArray arrayWithObjects:
[[[NSSortDescriptor alloc]
initWithKey:@"loginDate"
ascending:NO]
autorelease],
[[[NSSortDescriptor alloc]
initWithKey:@"username"
ascending:YES]
autorelease],
nil]];
If you build for iOS 4 or higher you can even do:
[array sortUsingDescriptors:
[NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"loginDate" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"username" ascending:YES],
nil]];
This works using the compare:
method to compare property key values, that is the value returned by valueForKey:
. In the case of NSDictionary
it will more or less just call objectForKey:
to get the value. There are some special notations like prefixing key name with "@", see Difference valueforKey objectForKey for more details.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With