2013年9月11日 星期三

[iOS] NSMutableArray 排序小記

一般在陣列排序都使用以下方式:
NSSortDescriptor *countSorter = [NSSortDescriptor sortDescriptorWithKey:@"count" ascending:YES];

[self.listData sortUsingDescriptors:[NSArray arrayWithObject:countSorter]];
[countSorter release];


但,發現如果 key 值是整數的話,就要加上 comparator 來判斷才可。
NSSortDescriptor *countSorter = [NSSortDescriptor sortDescriptorWithKey:@"count" ascending:YES comparator:^(id obj1, id obj2)
{
    if([obj1 integerValue] > [obj2 integerValue])
    {
        return (NSComparisonResult)NSOrderedDescending;
    }
    if([obj1 integerValue] < [obj2 integerValue])
    {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];

[self.listData sortUsingDescriptors:[NSArray arrayWithObject:countSorter]];
[countSorter release];


如果是判斷內容是 NSDate 的話,使用以下方式:
NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor];
self.listData = [[self.listData sortedArrayUsingDescriptors:sortDescriptors] mutableCopy];

沒有留言:

張貼留言