//第一种,利用数组的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);