你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

NSArray排序

2022/5/19 12:08:15

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){ ... }]