I have an NSArray
of NSNumber
objects that I have successfully sorted in ascending order using the following:
[myArray sortedArrayUsingSelector:@selector(compare:)]
However, I need to sort this in descending order. I take it that compare:
only sorts in ascending order. While I can go about reversing the NSArray
, I am curious as to whether or not there is a more simpler or more effective way of going about doing this.
EDIT: I found this question which provides a simple way to reverse iterate an NSArray
:
for (id someObject in [myArray reverseObjectEnumerator])
This works fine, I guess it's a nice simple solution, but I'm curious as to whether or not there is a way to specify sorting in descending order.
Use a sort descriptor
NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self"
ascending: NO];
return [myArray sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];
Another way, imo, is also nice: write another reverseCompare with category:
@implementation NSNumber (Utility)
- (NSComparisonResult)reverseCompare:(NSNumber *)aNumber {
return [aNumber compare:self];
}
The good thing is that you can reuse everywhere and don't have to write the loop with reverse iterate. The bad thing is that you have to write more code:)
use sortarrayusingcomparator method like that
NSArray *sortedArray = [array sortedArrayUsingComparator:
^NSComparisonResult(id obj1, id obj2){
return [obj2 compare:obj1];
}];
by reversing the order of objects you will obtain a descending order
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