zoukankan      html  css  js  c++  java
  • 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;
    }
    

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

  • 相关阅读:
    使用CustomValidate自定义验证控件
    C#中金额的大小写转换
    Andriod出错之Unable to build: the file dx.jar was not loaded from the SDK folder!
    VC 编写的打字练习
    机房工作笔记Ping只有单向通
    web服务协同学习笔记(1)
    Dll 学习3 将MDI子窗口封装在DLL中
    机房工作学习文件共享
    Andriod出错之Failed to find an AVD compatible with target 'Android 2.2'
    Andriod出错之wrapper was not properly loaded first
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4820250.html
Copyright © 2011-2022 走看看