iOS - sortedArrayUsingComparator

2020-04-21  本文已影响0人  Simple_Code

sortedArrayUsingComparatorcompare配合使用可以写出更优雅的代码
代码:

// 定义一个数组数组
    NSArray *array = @[@(3),@(5),@(4),@(2),@(1),@1,@4];
    // 对数组进行排序(升序)
    NSArray *resultAscending = [array sortedArrayUsingComparator:^NSComparisonResult(NSNumber *obj1, NSNumber *obj2) {
        NSLog(@"%@ ~ %@", obj1, obj2);
        // 方法一:(推荐)
        return [obj1 compare:obj2];
        
        // 方法二:
        NSComparisonResult result =  [obj1 compare:obj2];
        if (result == NSOrderedAscending) {
            return NSOrderedAscending;// 3 5
        } else if (result == NSOrderedDescending) {
            return NSOrderedDescending;// 5 4
        } else {
           return NSOrderedSame;
        }
        
        // 方法三:
        if (obj1.integerValue > obj2.integerValue) {
            return NSOrderedDescending;// 5 4
        } else if (obj1.integerValue < obj2.integerValue) {
            return NSOrderedAscending;// 3 5
        } else {
           return NSOrderedSame;
        }
        
    }];

    NSLog(@"对数组进行排序(正序):%@", resultAscending);
    // 对数组进行排序(降序)
    NSArray *resultDescending = [array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        NSLog(@"%@ ~ %@", obj1, obj2);
        return [obj2 compare:obj1];
    }];
    NSLog(@"对数组进行排序(降序):%@", resultDescending);
    
    
    // 对数组进行排序(乱序)
    NSArray *resultBreak = [resultAscending sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        NSLog(@"%@ ~ %@", obj1, obj2);
        if (arc4random_uniform(2) == 0) { // arc4random_uniform会随机返回一个0到上界之间(不含上界)的整数。以2为上界会得到0或1,像投硬币一样
            return [obj2 compare:obj1];// descending
        } else {
            return [obj1 compare:obj2];// ascending
        }
    }];
    NSLog(@"对数组进行排序(乱序):%@", resultBreak);
    
    
    // 对数组进行排序(倒序)
    NSArray *resultReversal = [array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        NSLog(@"%@ ~ %@", obj1, obj2);
        return NSOrderedDescending;
    }];
    NSLog(@"对数组进行排序(倒序):%@", resultReversal);

打印结果:

2020-04-21 16:13:32.239073+0800 TT[7523:642448] 3 ~ 5
2020-04-21 16:13:32.239212+0800 TT[7523:642448] 5 ~ 4
2020-04-21 16:13:32.239316+0800 TT[7523:642448] 3 ~ 4
2020-04-21 16:13:32.239402+0800 TT[7523:642448] 2 ~ 1
2020-04-21 16:13:32.239532+0800 TT[7523:642448] 1 ~ 4
2020-04-21 16:13:32.239617+0800 TT[7523:642448] 1 ~ 1
2020-04-21 16:13:32.239732+0800 TT[7523:642448] 2 ~ 1
2020-04-21 16:13:32.239842+0800 TT[7523:642448] 2 ~ 4
2020-04-21 16:13:32.240251+0800 TT[7523:642448] 3 ~ 1
2020-04-21 16:13:32.240555+0800 TT[7523:642448] 3 ~ 1
2020-04-21 16:13:32.240817+0800 TT[7523:642448] 3 ~ 2
2020-04-21 16:13:32.241128+0800 TT[7523:642448] 3 ~ 4
2020-04-21 16:13:32.241415+0800 TT[7523:642448] 4 ~ 4
2020-04-21 16:13:32.241758+0800 TT[7523:642448] 5 ~ 4
2020-04-21 16:13:32.242164+0800 TT[7523:642448] 对数组进行排序(正序):(
    1,
    1,
    2,
    3,
    4,
    4,
    5
)
2020-04-21 16:13:32.242530+0800 TT[7523:642448] 3 ~ 5
2020-04-21 16:13:32.242896+0800 TT[7523:642448] 3 ~ 4
2020-04-21 16:13:32.243326+0800 TT[7523:642448] 5 ~ 4
2020-04-21 16:13:32.243801+0800 TT[7523:642448] 2 ~ 1
2020-04-21 16:13:32.245034+0800 TT[7523:642448] 1 ~ 4
2020-04-21 16:13:32.245157+0800 TT[7523:642448] 2 ~ 4
2020-04-21 16:13:32.245255+0800 TT[7523:642448] 2 ~ 1
2020-04-21 16:13:32.245587+0800 TT[7523:642448] 1 ~ 1
2020-04-21 16:13:32.245928+0800 TT[7523:642448] 5 ~ 4
2020-04-21 16:13:32.246260+0800 TT[7523:642448] 4 ~ 4
2020-04-21 16:13:32.246611+0800 TT[7523:642448] 3 ~ 4
2020-04-21 16:13:32.246962+0800 TT[7523:642448] 3 ~ 2
2020-04-21 16:13:32.247345+0800 TT[7523:642448] 对数组进行排序(降序):(
    5,
    4,
    4,
    3,
    2,
    1,
    1
)
2020-04-21 16:13:32.247798+0800 TT[7523:642448] 1 ~ 1
2020-04-21 16:13:32.248112+0800 TT[7523:642448] 1 ~ 2
2020-04-21 16:13:32.248542+0800 TT[7523:642448] 3 ~ 4
2020-04-21 16:13:32.249035+0800 TT[7523:642448] 4 ~ 5
2020-04-21 16:13:32.249276+0800 TT[7523:642448] 3 ~ 5
2020-04-21 16:13:32.249614+0800 TT[7523:642448] 4 ~ 5
2020-04-21 16:13:32.249983+0800 TT[7523:642448] 4 ~ 4
2020-04-21 16:13:32.250339+0800 TT[7523:642448] 1 ~ 3
2020-04-21 16:13:32.250672+0800 TT[7523:642448] 1 ~ 3
2020-04-21 16:13:32.251180+0800 TT[7523:642448] 2 ~ 3
2020-04-21 16:13:32.251723+0800 TT[7523:642448] 2 ~ 5
2020-04-21 16:13:32.252757+0800 TT[7523:642448] 对数组进行排序(乱序):(
    1,
    1,
    3,
    2,
    5,
    4,
    4
)
2020-04-21 16:13:32.252884+0800 TT[7523:642448] 3 ~ 5
2020-04-21 16:13:32.253037+0800 TT[7523:642448] 3 ~ 4
2020-04-21 16:13:32.253498+0800 TT[7523:642448] 5 ~ 4
2020-04-21 16:13:32.253734+0800 TT[7523:642448] 2 ~ 1
2020-04-21 16:13:32.254113+0800 TT[7523:642448] 1 ~ 4
2020-04-21 16:13:32.254624+0800 TT[7523:642448] 1 ~ 4
2020-04-21 16:13:32.254758+0800 TT[7523:642448] 1 ~ 1
2020-04-21 16:13:32.255501+0800 TT[7523:642448] 4 ~ 4
2020-04-21 16:13:32.255678+0800 TT[7523:642448] 4 ~ 1
2020-04-21 16:13:32.256158+0800 TT[7523:642448] 4 ~ 1
2020-04-21 16:13:32.256340+0800 TT[7523:642448] 4 ~ 2
2020-04-21 16:13:32.256795+0800 TT[7523:642448] 对数组进行排序(倒序):(
    4,
    1,
    1,
    2,
    4,
    5,
    3
)

上一篇下一篇

猜你喜欢

热点阅读