• iOS_词典阵列 按key分组和排序


    //
    //  main.m
    //  SortGroup
    //
    //  Created by beyond on 14-10-26.
    //  Copyright (c) 2014年 beyond.com All rights reserved.
    //  按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;
    }
    

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    树形DP,最大直径,并查集——HDU4514
    树形DP——HDU2196
    树上倍增法,LCA——CF-832-D
    LCA,Tarjan——POJ1330
    树的直径,树形DP,DFS——POJ1958
    剑指offer28-最小k个数
    剑指offer27-数组中出现次数超过一半的数字
    剑指offer26-字符串的排列
    剑指offer25-二叉搜索树与双向链表
    剑指offer24-复杂链表的复制
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4820250.html
Copyright © 2020-2023  润新知