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;

        }

        return NSOrderedSame;

    }];

    

    for (CustomMode *modein sortArr) {

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

    }

}

高级方法:

- (void)sortArr1 {

    NSMutableArray *customArr = [[NSMutableArray alloc] 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 = [NSSortDescriptor sortDescriptorWithKey:@"consumeStatus" ascending:YES];

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

    NSSortDescriptor *priceDesc = [NSSortDescriptor sortDescriptorWithKey:@"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",[[NSDate date] timeIntervalSinceDate:date]);

}



代码github地址:https://github.com/songxuhua/TestForAlgorithms



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NSMutableArray是Objective-C中的可变数组类,常用于存储和管理一组有序的对象。以下是NSMutableArray的常见用法: 1. 创建NSMutableArray对象: ```objective-c NSMutableArray *array = [NSMutableArray array]; // 空数组 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"obj1", @"obj2", nil]; // 初始化含有对象的数组 ``` 2. 添加和删除对象: ```objective-c [array addObject:@"obj3"]; // 在数组末尾添加对象 [array insertObject:@"obj4" atIndex:2]; // 在指定索引位置插入对象 [array removeObject:@"obj2"]; // 移除指定对象 [array removeObjectAtIndex:0]; // 移除指定索引位置的对象 ``` 3. 替换和交换对象: ```objective-c [array replaceObjectAtIndex:1 withObject:@"newObj"]; // 替换指定索引位置的对象 [array exchangeObjectAtIndex:0 withObjectAtIndex:2]; // 交换两个索引位置的对象 ``` 4. 获取数组信息: ```objective-c NSUInteger count = [array count]; // 获取数组中对象的数量 id obj = [array objectAtIndex:2]; // 获取指定索引位置的对象 NSInteger index = [array indexOfObject:@"obj3"]; // 获取指定对象的索引位置 BOOL containsObj = [array containsObject:@"obj2"]; // 判断数组是否包含指定对象 ``` 5. 遍历数组: ```objective-c for (id obj in array) { // 遍历数组中的对象 } [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { // 使用block遍历数组中的对象,可以获取对象、索引和停止遍历的标志 }]; ``` 6. 数组排序: ```objective-c [array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { // 自定义的比较方法,用于数组排序 }]; ``` 这只是NSMutableArray的一些常见用法,还有其他更多的方法和功能可供使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值