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

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

iOS_词典阵列 按key分组和排序的更多相关文章

  1. iOS_字典数组 按key分组和排序

    int main(int argc, const charchar * argv[]) { @autoreleasepool { // 1.定义一个测试的字典数组 NSMutableArray *di ...

  2. Linq入门演练---(1)基本用法-分组,排序,内连接

    这一节大家共同学习下LINQ的基本用法,主要包括LINQ的分组,排序,和内外连接. 1.分组 基本语法:  group element by key element 表示查询结果返回的元素,key表示 ...

  3. WPF DataGrid分组和排序

    之前一直用的Dev的GridControl,控件自带分组排序啥的.今天试了下在wpf自带的Datagrid控件上实现分组和排序. Datagrid上实现这些功能主要用到CollectionViewSo ...

  4. java List分组和排序处理

    在一些应用中,需要将List中的对象按某种情况分组或者排序处理.做个小结如下: 1. 如一个List中存放了ProductDoing对象,productDoing对象有rawTypeId 现在要求将r ...

  5. MySQL在按照某个字段分组、排序加序号

    事情是这样的,最近领导给了一个新的需求,要求在一张订单表中统计每个人第一次和第二次购买的时间间隔,最后还需要按照间隔统计计数,求出中位数等数据. 由于MySQL不想Oracle那般支持行号.中位数等, ...

  6. mysql 分组内 排序

    mysql 分组内 排序 类似于 sqlserver over partition by   因为mysql中木有sqlserver over partition by这个函数,要从sqlserver ...

  7. ROW_NUMBER() OVER()函数用法;(分组,排序),partition by

    转载:https://www.cnblogs.com/alsf/p/6344197.html 1.row_number() over()排序功能: (1) row_number() over()分组排 ...

  8. SAS 分组与排序

    SAS 分组与排序 SAS对数据集进行操作时,经常需要在SET.MERGE.MODIFY或 UPDATE语句中使用分组数据.使用分组数据最基本的方法是使用BY 语句,其基本形式如下: BY 变量列表; ...

  9. NodeJS对象数组Array 根据对象object key的值排序sort

    有个js对象数组 var ary=[{id:1,name:”b”},{id:2,name:”b”}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数. /** * 对数组中的对象,按对象 ...

随机推荐

  1. php 汉字转换成拼音

    class PinYin { private static $__data = array(); private static $__init = false; private static func ...

  2. OpenLayers 添加OpenStreetMap(OSM)瓦片层示例

    This article from:http://wiki.openstreetmap.org/wiki/OpenLayers_Simple_Example Deploy an OpenStreetM ...

  3. 二叉查找树的Insert和Delete操作

    struct TreeNode{ SearchTree Left; SearchTree Right; ElementType Ele; }; /*递归一定有出口*/ /*递归代码就是要重复使用*/ ...

  4. hdu 5540 Secrete Master Plan(水)

    Problem Description Master Mind KongMing gave Fei Zhang a secrete master plan stashed × matrix, but ...

  5. FieldInfo.IsSpecialName Property【转】

    Gets a value indicating whether the corresponding SpecialName attribute is set in the FieldAttribute ...

  6. arcgis for javascript之ArcGISDynamicMapServiceLayer图层控制的实现

    图层控制是非常多GIS系统里面必须的一个小功能,本文就说说arcgis for javascript下ArcGISDynamicMapServiceLayer图层控制的实现方式.首先看图: 实现效果 ...

  7. Hadoop学习之编译eclipse插件

    近期准备開始学习Hadoop1.2.1的源码,感觉最好的方法还是能够在运行Hadoop及hadoop作业时跟踪调试代码的实际运行情况.因为选择的IDE为eclipse,所以准备编译一下hadoop的e ...

  8. jQuery源码笔记——四

    each()实现 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context ) ...

  9. Schema-based AOP support

    本文参考至:spring-framework-reference.pdf的7.3 章节 [Schema-based AOP support] If you are unable to use Java ...

  10. util 学习

    const I = 3.4893589; console.log(Number.parseInt(I)); console.log(Number.parseFloat(I)); console.log ...