IOS几种简单有效的数组排序方法

xiaoxiao2021-02-27  252

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

转载请注明原文地址: https://www.6miu.com/read-5081.html

最新回复(0)