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;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
iOS_词典阵列 按key分组和排序的更多相关文章
- iOS_字典数组 按key分组和排序
int main(int argc, const charchar * argv[]) { @autoreleasepool { // 1.定义一个测试的字典数组 NSMutableArray *di ...
- Linq入门演练---(1)基本用法-分组,排序,内连接
这一节大家共同学习下LINQ的基本用法,主要包括LINQ的分组,排序,和内外连接. 1.分组 基本语法: group element by key element 表示查询结果返回的元素,key表示 ...
- WPF DataGrid分组和排序
之前一直用的Dev的GridControl,控件自带分组排序啥的.今天试了下在wpf自带的Datagrid控件上实现分组和排序. Datagrid上实现这些功能主要用到CollectionViewSo ...
- java List分组和排序处理
在一些应用中,需要将List中的对象按某种情况分组或者排序处理.做个小结如下: 1. 如一个List中存放了ProductDoing对象,productDoing对象有rawTypeId 现在要求将r ...
- MySQL在按照某个字段分组、排序加序号
事情是这样的,最近领导给了一个新的需求,要求在一张订单表中统计每个人第一次和第二次购买的时间间隔,最后还需要按照间隔统计计数,求出中位数等数据. 由于MySQL不想Oracle那般支持行号.中位数等, ...
- mysql 分组内 排序
mysql 分组内 排序 类似于 sqlserver over partition by 因为mysql中木有sqlserver over partition by这个函数,要从sqlserver ...
- ROW_NUMBER() OVER()函数用法;(分组,排序),partition by
转载:https://www.cnblogs.com/alsf/p/6344197.html 1.row_number() over()排序功能: (1) row_number() over()分组排 ...
- SAS 分组与排序
SAS 分组与排序 SAS对数据集进行操作时,经常需要在SET.MERGE.MODIFY或 UPDATE语句中使用分组数据.使用分组数据最基本的方法是使用BY 语句,其基本形式如下: BY 变量列表; ...
- NodeJS对象数组Array 根据对象object key的值排序sort
有个js对象数组 var ary=[{id:1,name:”b”},{id:2,name:”b”}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数. /** * 对数组中的对象,按对象 ...
随机推荐
- matlab绘制函数
>> x1=linspace(,*pi,); x2=linspace(,*pi,); x3=linspace(,*pi,); y1=sin(x1); y2=+sin(x2); y3=+si ...
- Delphi窗体最大化按钮不可用情况下的最大化
最大化按钮不可用,而且窗体最大化,我以前一直这样设置:在Object Inspector下把BorderIcons属性下的biMaximize属性设置为False,然后把WindowState属性设置 ...
- 普里姆(Prim)算法
/* 普里姆算法的主要思想: 利用二维数组把权值放入,然后找在当前顶点的最小权值,然后走过的路用一个数组来记录 */ # include <stdio.h> typedef char Ve ...
- strlen、strcmp、strcat、strcpy、memcpy基础函数的实现
最近实习+投简历+琐事弄得自己忙的不行不行的,终于今天可以开始记录一些东西了... 1.strlen函数的实现 int strlen(const char *str){ assert(str!=NUL ...
- UVA 116 Unidirectional TSP 经典dp题
题意:找最短路,知道三种行走方式,给出图,求出一条从左边到右边的最短路,且字典序最小. 用dp记忆化搜索的思想来考虑是思路很清晰的,但是困难在如何求出字典序最小的路. 因为左边到右边的字典序最小就必须 ...
- XML转化DS等
public class XmlData { /// <summary> /// 将DataTable对象转换成XML字符串 /// < ...
- 关于Resharper的使用经验
发现Resharper这东西真的有点累赘,重构也是,一开始用会有很多莫名其妙的提示.现在的项目用了Resharper,js是很方便,有定位功能,但连TypeScript的js都有了.
- C# - 重定义一个接口的实现
using System;using System.Collections.Generic;using System.Text; namespace MyTester{ public inter ...
- js实现睡眠
//js暂停函数 function Pause(obj, iMinSecond) { if (window.eventList == null) window.eventList = new Arra ...
- EC读书笔记系列之17:条款41、42、43、44、45、46
条款41 了解隐式接口与编译器多态 记住: ★classes和templates都支持接口和多态 ★对classes而言接口是显式的(explicit),以函数签名为中心.多态则是通过virtual函 ...