oc对数组排序

6 篇文章 0 订阅

       最近写东西要对数组进行一些简单的操作,在这里进行下一些总结,方便以后参考。

    NSMutableArray *array1 = [[NSMutableArray alloc ]initWithObjects:
                              @{@"name":@"a",@"sex":@"22"},
                              @{@"name":@"b",@"sex":@"32"},
                              @{@"name":@"c",@"sex":@"25"},
                              @{@"name":@"d",@"sex":@"45"},
                              @{@"name":@"e",@"sex":@"56"},
                              @{@"name":@"j",@"sex":@"23"},
                              @{@"name":@"f",@"sex":@"67"},
                              @{@"name":@"h",@"sex":@"23"},
                              @{@"name":@"h",@"sex":@"234"},
                              @{@"name":@"h",@"sex":@"2345"},
                              @{@"name":@"h",@"sex":@"4562"},
                              @{@"name":@"h",@"sex":@"12312"},
                              @{@"name":@"h",@"sex":@"324"},
                              @{@"name":@"h",@"sex":@"3"},
                              @{@"name":@"h",@"sex":@"1"},
                              @{@"name":@"h",@"sex":@"67456"},
                              @{@"name":@"h",@"sex":@"3422"},
                              @{@"name":@"h",@"sex":@"23344"},
                              @{@"name":@"h",@"sex":@"3456"},
                              @{@"name":@"h",@"sex":@"82"},
                              nil];
   这是数据源,对数组里面的字典的sex属性进行排序:

   第一种方案   :  冒泡排序写俩for循环

 

  //冒泡排序
    NSDictionary *t;
    for (int i = 0; i<[array1 count]-1; i++) {
        for (int j =0; j<[array1 count]-i-1; j++) {
            NSInteger data1 = [array1[j+1][@"sex"]intValue];
            NSInteger data2 = [array1[j]  [@"sex"]intValue];
            if (data1 == MIN(data1, data2)) {
                t = [array1 objectAtIndex:j+1];
                //对数组里的数据逆序存放
                [array1 exchangeObjectAtIndex:j+1 withObjectAtIndex:j];
                [array1 replaceObjectAtIndex:j withObject:t];
            }
        }
    }

        冒泡对于数组里复杂的数据都可以排序,项目里我的数据是格式是     数组--->字典-->数组-->字典   根据最后字典里的某一个属性进行排序。

 第二种方案  :    利用 NSSortDescriptor 类

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sex" ascending:YES];
    [array1 sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

   这里YES是代表升序,降序变成NO。有点要说明下,这个类这么写进行排序只是根据第一个数字去排序比如:1,32,123,23  利用他排序后的结果是 , 1,123,23,32字母也是一样。

第三种方案  :    NSComparator
NSComparator cmptr = ^(id obj1, id obj2){
    NSString *t1=obj1[@"sex"];
    NSString *t1=obj2[@"sex"]; 
    if ([t1 doubleValue]<[t2 doubleValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }
    if ([t1 doubleValue]>[t2 doubleValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
};
在要适当的地方,用数组调用:
 [array1 sortUsingComparator:cmptr];


    备注:以上为本人浅见,如有不对之处,请各位大大们指出纠正,谢谢!!
  


    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值