1. 程式人生 > >NSMutableArray的雙條件或多條件排序

NSMutableArray的雙條件或多條件排序

最近我在研究雙條件或多條件排序,當然是有主要條件和次要條件的咯。假設有這麼個場景:需要對優惠捲進行雙重條件排序,根據優惠卷狀態和優惠卷的消費金額進行正序排序,所用程式碼如下:

先按照優惠卷狀態排序,狀態一樣再按優惠卷消費金額排序.

初級方法:

- (void)sortArr {

NSMutableArray *customArr = [[NSMutableArrayalloc] init];

    for (NSInteger i =0 ; i < 100; i ++) {

        CustomMode *mode = [[CustomModealloc] init];

        mode.customName

= [NSStringstringWithFormat:@"客戶%ld",(long)i];

        mode.couponCode = [selfarcdomStr];

        mode.couponPrice = arc4random()%8888 + 1;

        mode.consumeStatus =arc4random()%ConsumeStatus_noRejected;

        [customArr addObject:mode];

    }

    NSArray *sortArr =  [customArr sortedArrayUsingComparator

:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {

        CustomMode *mode1 = (CustomMode *)obj1;

        CustomMode *mode2 = (CustomMode *)obj2;

        [@(mode1.consumeStatus)compare:@(mode2.consumeStatus)];

        if (mode1.consumeStatus > mode2.consumeStatus) {

returnNSOrderedDescending;

        } else if (mode1.consumeStatus == mode2.consumeStatus) {

            return (mode1.couponPrice > mode2.couponPrice);

        } else if (mode1.consumeStatus < mode2.consumeStatus) {

returnNSOrderedAscending;

        }

returnNSOrderedSame;

    }];

    for (CustomMode *modein sortArr) {

NSLog(@"consumeStatus is %d couponPrice is %f\n\n",mode.consumeStatus,mode.couponPrice);

    }

}

高階方法:

- (void)sortArr1 {

NSMutableArray *customArr = [[NSMutableArrayalloc] init];

    for (NSInteger i = 0 ; i < 100; i ++) {

        CustomMode *mode = [[CustomMode alloc] init];

        mode.customName = [NSString stringWithFormat:@"客戶%ld",(long)i];

        mode.couponCode = [self arcdomStr];

        mode.couponPrice = arc4random()%8888 + 1;

        mode.consumeStatus = arc4random()%ConsumeStatus_noRejected;

        [customArr addObject:mode];

    }

    NSDate *date = [NSDate date];

// 1.先按照書名進行排序

// 這裡的key寫的是@property的名稱

NSSortDescriptor *statusDesc = [NSSortDescriptorsortDescriptorWithKey:@"consumeStatus"ascending:YES];

// 2.再按照姓進行排序

NSSortDescriptor *priceDesc = [NSSortDescriptorsortDescriptorWithKey:@"couponPrice"ascending:YES];

// 按順序新增排序描述器

    NSArray *descs = [NSArray arrayWithObjects:statusDesc, priceDesc, nil];

    NSArray *array2 = [customArr sortedArrayUsingDescriptors:descs];

//        for (CustomMode *mode in array2) {

//            NSLog(@"\nconsumeStatus is %d couponPrice is %f\n\n",mode.consumeStatus,mode.couponPrice);

//        }

NSLog(@"tmv2 is %f",[[NSDatedate] timeIntervalSinceDate:date]);

}


程式碼github地址:https://github.com/songxuhua/TestForAlgorithms