NSArray排序

1. Either you implement a compare-method for your object:

- (NSComparisonResult)compare:(Person *)otherObject {
   
return [self.birthDate compare:otherObject.birthDate];
}

NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(compare:)];


2. or usually even better: (The default sorting selector of NSSortDescriptor is compare:)

NSSortDescriptor *sortDescriptor;
sortDescriptor
= [[[NSSortDescriptor alloc] initWithKey:@"birthDate"
                                              ascending
:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray
= [drinkDetails sortedArrayUsingDescriptors:sortDescriptors];

3. See the NSMutableArray method sortUsingFunction:context:
NSComparisonResult compare(Person *firstPerson, Person *secondPerson, void *context) {
 
if ([firstPerson birthDate] < [secondPerson birthDate])
   
return NSOrderedAscending;
 
else if ([firstPerson birthDate] > [secondPerson birthDate])
   
return NSOrderedDescending;
 
else
   
return NSOrderedSame;
}
int SortPlays(id a,  id b, void* context) {
   
Play* p1=a;
   
Play* p2=b;
   
if (p1.score<p2.score) return NSOrderedDescending;
   
else if (p1.score>p2.score) return NSOrderedAscending;
   
return NSOrderedSame;
}

...
[validPlays sortUsingFunction:SortPlays context:nil];

4. Starting in iOS 4 you can also use blocks for sorting.
NSArray *arrayToSort = where ever you get the array from... ;
NSComparisonResult (^sortBlock)(id, id) = ^(id obj1, id obj2) {
 
if ([obj1 position] > [obj2 position]) {
   
return (NSComparisonResult)NSOrderedDescending;
 
}
 
if ([obj1 position] < [obj2 position]) {
   
return (NSComparisonResult)NSOrderedAscending;
 
}
 
return (NSComparisonResult)NSOrderedSame;
};
NSArray *sorted = [arrayToSort sortedArrayUsingComparator:sortBlock];
featuresArray = [unsortedFeaturesArray sortedArrayUsingComparator: ^(id a, id b){ ... }]
原文地址:https://www.cnblogs.com/likwo/p/2302584.html