您的位置:首页 > 其它

怎么对包含自定义对象的NSMutableArray排序

2013-06-05 12:58 387 查看

Compare method

Either you implement a compare-method for your object:
- (NSComparisonResult)compare:(Person *)otherObject {
return [self.birthDate compare:otherObject.birthDate];
}

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

NSSortDescriptor (better)

or usually even better:
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"birthDate"
ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingDescriptors:sortDescriptors];
You can easily sort by multiple keys by adding more than one to the array. Using custom comparator-methods is possible as well. Have a look at thedocumentation.

Blocks (shiny!)

There's also the possibility of sorting with a block since Mac OS X 10.6 and iOS 4:
NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSDate *first = [(Person*)a birthDate];
NSDate *second = [(Person*)b birthDate];
return [first compare:second];
}];
For this particular example I'm assuming that the objects in your array have a 'position' method, which returns an 
NSInteger
.
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];
Note: the "sorted" array will be autoreleased.[/code]
If this 'position' is in NSDictory.
NSComparisonResult (^sortBlock)(id, id) = ^(id obj1, id obj2) {            NSInteger p1= [((NSString*) [obj1 objectForKey:@"position"]) integerValue];            NSInteger p2= [((NSString*) [obj2 objectForKey:@"position"]) integerValue];            if (p1 > p2) {                return (NSComparisonResult)NSOrderedDescending;            }            if (p1 < p2) {                return (NSComparisonResult)NSOrderedAscending;            }            return (NSComparisonResult)NSOrderedSame;        };
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐