//第一种,利用数组的sortedArrayUsingComparator调用 NSComparator ,obj1和obj2指的数组中的对象
//数组进行排序
// NSComparator cpmtr = ^(id obj1, id obj2){
// //降序
// if ([obj1 integerValue] > [obj2 integerValue]) {
// return (NSComparisonResult)NSOrderedDescending;
// }
// //升序
// if ([obj1 integerValue] < [obj2 integerValue]) {
// return (NSComparisonResult)NSOrderedAscending;
// }
// return (NSComparisonResult)NSOrderedSame;
// };
NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];
//排序前
NSMutableString *outputBefore = [[NSMutableString alloc] init];
for(NSString *str in sortArray){
[outputBefore appendFormat:@"%@ ", str];
}
NSLog(@"排序前:%@",outputBefore);
// NSArray *array = [sortArray sortedArrayUsingComparator:cpmtr];
NSArray *arr = [sortArray sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
//降序
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
//升序
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
NSLog(@"===%@",arr);
NSMutableString *outputAfter = [[NSMutableString alloc] init];
for(NSString *str in arr){
[outputAfter appendFormat:@"%@ ", str];
}
NSLog(@"排序后:%@",outputAfter);
第二种 排序方法 利用sortedArrayUsingFunction 调用 对应方法customSort,这个方法中的obj1和obj2分别是指数组中的对象。
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];
NSLog(@"===========**********=============");
NSMutableArray *data1 = [NSMutableArray new];
for(int i = 0; i < 10; i++){
Model *mod = [Model new];
mod.name = [NSString stringWithFormat:@"xiao%d", i+1];
mod.age = [NSString stringWithFormat:@"%d",arc4random()%(i+2) + 5];
[data1 addObject:mod];
}
NSMutableString *outputBefore3 = [[NSMutableString alloc] init];
for(Model *str in data1){
[outputBefore3 appendFormat:@"%@====>>%@\n",str.name,str.age];
}
NSLog(@"排序前:%@",outputBefore3);
// [data1 sortWithOptions:NSSortConcurrent usingComparator:^NSComparisonResult(Model* obj1, Model* obj2) {
// //降序
// if ([obj1.age integerValue] > [obj2.age integerValue]) {
// return (NSComparisonResult)NSOrderedDescending;
// }
// //升序
// if ([obj1.age integerValue] < [obj2.age integerValue]) {
// return (NSComparisonResult)NSOrderedAscending;
// }
// return (NSComparisonResult)NSOrderedSame;
// }];
[data1 sortUsingComparator:^NSComparisonResult(Model* obj1, Model* obj2) {
if ([obj1.age integerValue] > [obj2.age integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
//升序
if ([obj1.age integerValue] < [obj2.age integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
for(Model *str in data1){
NSLog(@"%@====%@\n",str.name, str.age);
}
第三种 利用sortUsingDescriptors调用NSSortDescriptor
NSMutableArray *data = [NSMutableArray new];
for(int i = 0; i < 10; i++){
StudentsObject *mod = [StudentsObject new];
mod.name = [NSString stringWithFormat:@"xiao%ld",random() % 10 + i];
mod.age = arc4random()%(i+2) + 5;
[data addObject:mod];
}
NSMutableString *outputBefore1 = [[NSMutableString alloc] init];
for(StudentsObject *str in data){
[outputBefore1 appendFormat:@"%@====>>%ld\n",str.name, (long)str.age];
}
NSLog(@"排序前:%@",outputBefore1);
//按照字母排序
// NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
//按照数字排序
NSSortDescriptor *sortDesriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
// NSArray *sorts = [[NSArray alloc]initWithObjects:&sortDescriptor count:1];
NSArray *sorts = [NSArray arrayWithObjects:sortDesriptor2,nil];
NSArray *arr1 = [data sortedArrayUsingDescriptors:sorts];
NSLog(@"===%@",sorts);
NSLog(@"=====>>>%@",arr1);
NSMutableString *outputAfter = [[NSMutableString alloc] init];
for(StudentsObject *str in arr1){
[outputAfter appendFormat:@"%@====%ld \n",str.name, (long)str.age];
}
NSLog(@"排序后:%@",outputAfter);