iOS_字典数组 按key分组和排序
- int main(int argc, const charchar * 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;
- }
iOS_字典数组 按key分组和排序的更多相关文章
- iOS_词典阵列 按key分组和排序
// // main.m // SortGroup // // Created by beyond on 14-10-26. // Copyright (c) 2014年 beyond.com All ...
- python 根据字典中的key,value进行排序
#coding=utf-8 import requests,json,collections,base64,datetime def sort(datas): data=json.dumps(data ...
- NodeJS对象数组Array 根据对象object key的值排序sort
有个js对象数组 var ary=[{id:1,name:”b”},{id:2,name:”b”}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数. /** * 对数组中的对象,按对象 ...
- PHP开发小技巧②—实现二维数组根据key进行排序
在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...
- python 对字典分别按照key值、value值进行排序
1.sorted函数首先介绍sorted函数,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数. 其中iterable表示 ...
- Linq入门演练---(1)基本用法-分组,排序,内连接
这一节大家共同学习下LINQ的基本用法,主要包括LINQ的分组,排序,和内外连接. 1.分组 基本语法: group element by key element 表示查询结果返回的元素,key表示 ...
- php对二维数组进行相关操作(排序、转换、去空白等)
php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04 这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...
- JS中遍历普通数组和字典数组的区别
// 普通数组 var intArray = new Array(); intArray[0] = "第一个"; intArray[1] = "第二个"; fo ...
- PHP根据数组的值分组
PHP根据数组的值分组,php array中没有自带这个函数但是很常用,今天写了出来记录一下. 代码: $_array = array( array(1,11,'2016-05-18') ...
随机推荐
- ssh.sh_for_ubuntu1204
#!/bin/bash sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config s ...
- 团队项目-第三次scrum 会议
时间:10.25 时长:30分钟 地点:线上 工作情况 团队成员 已完成任务 待完成任务 解小锐 根据初步讨论结果编写初步的api文档 编写project和projectGenerator类 陈鑫 采 ...
- Mysql 查询—按位运算
前言:虽说这是件小事儿,但本宝宝思前想后,还是为它留下一笔,嘿嘿.反正写博客不浪费纸和笔!好久没有开启我的逗比模式了,我亲爱的乖徒弟DBA,DBB,DBAA等,好久不见你们,遥祝幸福快乐+DB. 整个 ...
- 第二章 Internet 地址结构
注意: 这个系列的博客只是为了巩固我学习的知识,参考的价值不是很大,如果需要,请转到http://www.cnblogs.com/ZCplayground/p/7764436.html Interne ...
- redis cluster管理工具redis-trib.rb详解
redis cluster管理工具redis-trib.rb详解 来源 http://weizijun.cn/2016/01/08/redis%20cluster%E7%AE%A1%E7%90%86% ...
- 【距离GDOI:130天】 AC自动机ing
弄完后缀数组,终于能安心来复习AC自动机了..其实当时学的很不好,非常不好..模版都是有问题的...今天花了第一节晚修和一节自习算是把AC自动机的基础弄好了...切掉3道基础题,然后就被某道坑爹题坑掉 ...
- 洛谷树剖模板题 P3384 | 树链剖分
原题链接 对于以u为根的子树,后代节点的dfn显然比他的dfn大,我们可以记录一下回溯到u的dfn,显然这两个dfn构成了一个连续区间,代表u及u的子树 剩下的就和树剖一样了 #include< ...
- 【CF edu 27 G. Shortest Path Problem?】
time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standa ...
- es6+最佳入门实践(2)
2.解构赋值 2.1.什么是解构赋值? 什么是解构赋值?这里的关键字还是赋值,这是说如何去赋值的问题,这里说的解构可以理解为解散重新构造,所以解构赋值可以理解为解散重新构造后进行赋值,通常是左边一种结 ...
- 汕头市队赛 SRM 07 C 整洁的麻将桌
C 整洁的麻将桌 SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂. KPM上周双打了n场麻将,但她这次没控分,而且因为是全民参与的麻将大赛,所以她的名 ...