IOS 对数组内元素进行排序

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-love-meng/p/5828492.html】

{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/5142578/blog/5060210