【iOS开发系列】字典数组按key分组和排序

//  按GroupTag分组和 按Order字段排序 enabled表示不启用
 
# import <foundation foundation.h= "" >
 
int main( int argc, const char * argv[]) {
     @autoreleasepool {
         // 1.定义一个测试的字典数组
         NSMutableArray *dictArray = @[
                                       @{
                                           @ "FEnabled" : [NSNumber numberWithInt: 1 ],
                                           @ "FGroupTag" : [NSNumber numberWithInt: 0 ],
                                           @ "FOrder" : [NSNumber numberWithInt: 0 ],
                                           @ "FName" : @ "宝玉"
                                           },
                                       @{
                                           @ "FEnabled" : [NSNumber numberWithInt: 1 ],
                                           @ "FGroupTag" : [NSNumber numberWithInt: 1 ],
                                           @ "FOrder" : [NSNumber numberWithInt: 0 ],
                                           @ "FName" : @ "黛玉"
                                           },
                                       @{
                                           @ "FEnabled" : [NSNumber numberWithInt: 0 ],
                                           @ "FGroupTag" : [NSNumber numberWithInt: 1 ],
                                           @ "FOrder" : [NSNumber numberWithInt: 1 ],
                                           @ "FName" : @ "宝钗"
                                           },
                                       @{
                                           @ "FEnabled" : [NSNumber numberWithInt: 1 ],
                                           @ "FGroupTag" : [NSNumber numberWithInt: 1 ],
                                           @ "FOrder" : [NSNumber numberWithInt: 2 ],
                                           @ "FName" : @ "湘云"
                                           },
                                       @{
                                           @ "FEnabled" : [NSNumber numberWithInt: 1 ],
                                           @ "FGroupTag" : [NSNumber numberWithInt: 2 ],
                                           @ "FOrder" : [NSNumber numberWithInt: 0 ],
                                           @ "FName" : @ "妙玉"
                                           },
                                       @{
                                           @ "FEnabled" : [NSNumber numberWithInt: 1 ],
                                           @ "FGroupTag" : [NSNumber numberWithInt: 3 ],
                                           @ "FOrder" : [NSNumber numberWithInt: 0 ],
                                           @ "FName" : @ "晴雯"
                                           },
                                       @{
                                           @ "FEnabled" : [NSNumber numberWithInt: 1 ],
                                           @ "FGroupTag" : [NSNumber numberWithInt: 3 ],
                                           @ "FOrder" : [NSNumber numberWithInt: 1 ],
                                           @ "FName" : @ "袭人"
                                           }
                                       
                                       ];
         // NSArray 转成 NSMutableArray
         // 0、对于不启用的,即enabled为0的字典模型,删除掉
         NSMutableArray *dictArr = [NSMutableArray array];
         for ( int i = 0 ; i < dictArray.count; i++) {
             NSDictionary *dict = dictArray[i];
             if ([[dict objectForKey:@ "FEnabled" ]intValue] == 1 ) {
                 [dictArr addObject:dict];
             }
         }
         // NSLog(@"清除未启用的字典后的数组:%@",dictArr);
         
         // 1、对数组按GroupTag排序
         NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@ "FGroupTag" ascending:YES]];
         NSArray *sortedArr = [dictArr sortedArrayUsingDescriptors:sortDesc];
         // NSLog(@"排序后的数组:%@",sortedArr);
         
         
         // 2、对数组进行分组,按GroupTag
         // 遍历,创建组数组,组数组中的每一个元素是一个模型数组
         NSMutableArray *_groupArr = [NSMutableArray array];
         NSMutableArray *currentArr = [NSMutableArray array];
         NSLog(@ "class--%@" ,[currentArr class ]);
         // 因为肯定有一个字典返回,先添加一个
         [currentArr addObject:sortedArr[ 0 ]];
         [_groupArr addObject:currentArr];
         // 如果不止一个,才要动画添加
         if (sortedArr.count > 1 ){
             for ( int i = 1 ; i < sortedArr.count; i++) {
                 // 先取出组数组中  上一个模型数组的第一个字典模型的groupID
                 NSMutableArray *preModelArr = [_groupArr objectAtIndex:_groupArr.count- 1 ];
                 int preGroupID = [[[preModelArr objectAtIndex: 0 ] objectForKey:@ "FGroupTag" ] intValue];
                 // 取出当前字典,根据groupID比较,如果相同则添加到同一个模型数组;如果不相同,说明不是同一个组的
                 NSDictionary *currentDict = sortedArr[i];
                 int groupID = [[currentDict objectForKey:@ "FGroupTag" ] intValue];
                 if (groupID == preGroupID) {
                     [currentArr addObject:currentDict];
                 } else {
                     // 如果不相同,说明 有新的一组,那么创建一个模型数组,并添加到组数组_groupArr
                     currentArr = [NSMutableArray array];
                     [currentArr addObject:currentDict];
                     [_groupArr addObject:currentArr];
                 }
             }
         }
         // 3、遍历 对每一组 进行排序
         NSMutableArray *tempGroupArr = [NSMutableArray array];
         for (NSMutableArray *arr in _groupArr) {
             NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@ "FOrder" ascending:YES]];
             NSMutableArray *tempArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
                 if ([[obj1 objectForKey:@ "FOrder" ]intValue] < [[obj2 objectForKey:@ "FOrder" ]intValue]){
                     return NSOrderedAscending;
                 }
                 if ([[obj1 objectForKey:@ "FOrder" ]intValue] > [[obj2 objectForKey:@ "FOrder" ]intValue]){
                     return NSOrderedDescending;
                 }
                 return NSOrderedSame;
             }];
             [tempGroupArr addObject:tempArr];
         }
         _groupArr = tempGroupArr;
         
         NSLog(@ "封装好的group数组:%@" ,_groupArr);
     }
     return 0 ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值