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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值