在利用tableview显示列表数据时,经常会要将数据源排序,往往我们的数据源都是一个数组,那么我们只需要将数据排序就好了,NSArray提供了很多种方法,按照所利用的排序参数,可以简单分为descriptor,selector,function,和block排序。
NSArray *sortArray
= [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];
运用 block排序:
for(NSString *str in sortArray){
NSLog(@"排序前:%@",str);
}
NSComparator cmptr = ^(id obj1, id obj2){
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
// return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
// return (NSComparisonResult)NSOrderedAscending;
return (NSComparisonResult)NSOrderedDescending;
}
return (NSComparisonResult)NSOrderedSame;
};
NSArray *array = [sortArray sortedArrayUsingComparator:cmptr];
for(NSString *str in array){
NSLog(@"排序后:%@",str);
}
NSInteger customSort (id obj1, id obj2, void* context)
{
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}
NSArray *array = [sortArray sortedArrayUsingFunction:customSort context:nil];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"CategoryName" ascending:YES];//传YES为升序,传no为降序。。 NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:&sortDescriptor count:1];
[_dateArray sortUsingDescriptors:sortDescriptors];
[value compare:(NSString *)];
[value compare:(NSString *) options:(NSStringCompareOptions)];
[value compare:(NSString *) options:(NSStringCompareOptions) range:(NSRange)];
options:(NSStringCompareOptions)
传入 NSStringCompareOptions 枚举的值
enum{
//以下定义高于 mac os 10.5 或者高于 iphone 2.0 可用
//以下定义高于 iphone 3.2 可用
}
range:(NSRange)
比较字符串的范围
location: 需要比较的字串起始位置(以0为起始)
length: 需要比较的字串长度
返回值:
typedef enum _NSComparisonResult {
} NSComparisonResult;
_dateArray = [NSMutableArray arrayWithArray:[_dateArray sortedArrayUsingComparator:
^NSComparisonResult(collectCategory *obj1, collectCategory *obj2) {
NSComparisonResult result = [obj1.CategoryName compare:obj2.CategoryName options:NSCaseInsensitiveSearch range:NSMakeRange(0,3)];
switch(result)
{
case NSOrderedAscending:
return NSOrderedAscending;
case NSOrderedDescending:
return NSOrderedDescending;
case NSOrderedSame:
return NSOrderedSame;
default:
return NSOrderedSame;
}
}] ];