逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::
Question: What I want to do seems pretty simple, but I can't find any answers on the web. I have an NSMutableArray of objects, let's say they are 'Person' objects. I want to sort the NSMutable array by Person.birthDate which is an NSDate.

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){ ... }]
@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted on 2011-12-02 00:03 逛奔的蜗牛 阅读(408) 评论(0)  编辑 收藏 引用 所属分类: Cocoa

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理