1、数组种元素为NSNumber类型,间接对数组种的元素进行排序:
#pragma mark -- 数组排序办法(升序)- (void)arraySortASC{ //数组排序 //定义一个数字数组 NSArray *array = @[@(3),@(4),@(2),@(1)]; //对数组进行排序 NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSLog(@"%@~%@",obj1,obj2); //3~4 2~1 3~1 3~2 return [obj1 compare:obj2]; //升序 }]; NSLog(@"result=%@",result);} #pragma mark -- 数组排序办法(降序)- (void)arraySortDESC{ //数组排序 //定义一个数字数组 NSArray *array = @[@(3),@(4),@(2),@(1)]; //对数组进行排序 NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSLog(@"%@~%@",obj1,obj2); //3~4 2~1 3~1 3~2 return [obj2 compare:obj1]; //降序 }]; NSLog(@"result=%@",result);} #pragma mark -- 数组排序办法(乱序)- (void)arraySortBreak{ //数组排序 //定义一个数字数组 NSArray *array = @[@(3),@(4),@(2),@(1),@(5),@(6),@(0)]; //对数组进行排序 NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSLog(@"%@~%@",obj1,obj2); //乱序 if (arc4random_uniform(2) == 0) { return [obj2 compare:obj1]; //降序 } else{ return [obj1 compare:obj2]; //升序 } }]; NSLog(@"result=%@",result);}
2、数组内元素为对象,依据对象的某一属性进行排序:
#pragma mark -- 数组排序办法(升序)- (void)arraySortASCWithKind:(KindType)kindType{ //数组排序 //定义一个数字数组 NSArray *array = [NSArray arrayWithArray:self.dataMuArr]; //对数组进行排序 NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSLog(@"%@~%@",obj1,obj2); //3~4 2~1 3~1 3~2 if ([obj1 isKindOfClass:[BATicker class]] && [obj2 isKindOfClass:[BATicker class]]) { BATicker * ticker1 = obj1; BATicker * ticker2 = obj2; NSNumber * number1 = @(ticker1.c); NSNumber * number2 = @(ticker2.c); if (kindType == KindTypeTurnover) {//成交额 number1 = @(ticker1.q); number2 = @(ticker2.q); }else if (kindType == KindTypePrice) {//价格 number1 = @(ticker1.c); number2 = @(ticker2.c); }else if (kindType == KindTypePercentageGain) {//涨幅 number1 = @(ticker1.price_P); number2 = @(ticker2.price_P); } return [number1 compare:number2]; //升序 } return [obj1 compare:obj2]; //升序 }]; NSMutableDictionary * keyIndexDic = [NSMutableDictionary dictionary]; for (int i = 0; i < result.count; i++) { BATicker * ticker = result[i]; [keyIndexDic setObject:@(i) forKey:ticker.s]; } self.dataMuArr = [NSMutableArray arrayWithArray:result]; self.keyIndexDic = [NSMutableDictionary dictionaryWithDictionary:keyIndexDic]; [self.tableView reloadData]; NSLog(@"result=%@",result);}#pragma mark -- 数组排序办法(降序)- (void)arraySortDESCKind:(KindType)kindType{ //数组排序 //定义一个数字数组 NSArray *array = [NSArray arrayWithArray:self.dataMuArr]; //对数组进行排序 NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSLog(@"%@~%@",obj1,obj2); //3~4 2~1 3~1 3~2 if ([obj1 isKindOfClass:[BATicker class]] && [obj2 isKindOfClass:[BATicker class]]) { BATicker * ticker1 = obj1; BATicker * ticker2 = obj2; NSNumber * number1 = @(ticker1.c); NSNumber * number2 = @(ticker2.c); if (kindType == KindTypeTurnover) {//成交额 number1 = @(ticker1.q); number2 = @(ticker2.q); }else if (kindType == KindTypePrice) {//价格 number1 = @(ticker1.c); number2 = @(ticker2.c); }else if (kindType == KindTypePercentageGain) {//涨幅 number1 = @(ticker1.price_P); number2 = @(ticker2.price_P); } return [number2 compare:number1]; //降序 } return [obj2 compare:obj1]; //降序 }]; NSMutableDictionary * keyIndexDic = [NSMutableDictionary dictionary]; for (int i = 0; i < result.count; i++) { BATicker * ticker = result[i]; [keyIndexDic setObject:@(i) forKey:ticker.s]; } self.dataMuArr = [NSMutableArray arrayWithArray:result]; self.keyIndexDic = [NSMutableDictionary dictionaryWithDictionary:keyIndexDic]; [self.tableView reloadData]; NSLog(@"result=%@",result);}
参考内容:
iOS之数组的排序(升序、降序及乱序)【https://www.cnblogs.com/xiao-...