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;
}

时间: 2024-10-23 09:21:57

iOS_字典数组 按key分组和排序的相关文章

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[]) { @autoreleasepoo

python 根据字典中的key,value进行排序

#coding=utf-8 import requests,json,collections,base64,datetime def sort(datas): data=json.dumps(datas)#dumps是将dict转化成str格式,loads是将str转化成dict格式. print u"data %s" % data data=json.loads(data) print type(data) msg=data['msg'] #获取msg中key,value print

练习 字符串存入字典 数组的降序 倒序 字符串目录存不存在 数组中文排序

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /* 第1题 请将如下数据存储成字典,并将字典内容以字符串形式输出,输出:"XXX,年龄XXX岁,科目XXX,分数XXX"(将XXX替换为相应的数据). */ NSString *name = @"张三"; NSInteger age = 22; NSNumber 

一月十日练习习题,1数组数据存入字典并输出2降序 和倒叙 输出数组中内容3对字符串当中信息进行查找是否存在4 把数组当中信息尽心中文排序

// //  main.m //  Pratise_Jan10_1 // //  Created by wangyang on 16/1/10. //  Copyright (c) 2016年 Wangyang. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /* 第1题 请将如下数据存储成字典,并将字典

第五讲.字典,集合,数组排序(快速排序,冒泡,默认排序)(源代码)

1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 6 //字典的使用 7 8 //创建字典对象 9 NSDictionary * a1 = [NSDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"

PHP usort 使用用户自定义的比较函数对数组中的值进行排序

From: http://www.php100.com/cover/php/2395.html usort (PHP 4, PHP 5) usort — 使用用户自定义的比较函数对数组中的值进行排序 说明 bool usort ( array &$array , callback $cmp_function ) 本函数将用用户自定义的比较函数对一个数组中的值进行排序.如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数. 比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分

JS中遍历普通数组和字典数组的区别

// 普通数组 var intArray = new Array(); intArray[0] = "第一个"; intArray[1] = "第二个"; for(var i = 0; i < intArray.length;i++) { alert(intArray[i]);    // 第一个,第二个 } // 拿到的是下标(像dictionary的key) for(var key in intArray) { alert(key);       // 0

PHP二维数组如何根据某个字段排序

分享下PHP二维数组如何根据某个字段排序的方法. 从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条. 本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求. 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条. 这个要求就不是 ORDER BY 能解决的问题了.因此翻看 PHP手册查找到了如下方法,做此笔记.

字典数组 区别

总结:字典,集合.数组.的相同点和不同点 <span style="font-size:18px;"> /** * * 相同点:都属于collection(集合),用来存储多个对象,并不限制对象的类型 * 不同点: * 1.作用: * 数组管理有序的集合 * 字典管理具有一一对应关系的数据集合 * 集合管理无序并且互异性的元素的集合. * 2.特点 * 数组:有序,并且元素可以重复. * 字典:无序,每一个元素都是一对键值对,一个key只能对应一个value,但是一个val