NSArray数组分组归类

NSArray数组分组归类

[TOC]

数组基本用法

遍历数组

// for循环
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil nil]; 
 int count = array.count; 
 for (int i = 0; i<count; i++) {  id obj = [array objectAtIndex:i];  } 

// for in 快速遍历
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil nil];  
int i =0;  
for (id obj in array) {  NSLog(@"%i-%@", i, obj);  i++;  }  

// 代码块遍历
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
[array enumerateObjectsUsingBlock:  ^(id obj, NSUInteger idx, BOOLBOOL *stop) {  NSLog(@"%i-%@", idx, obj);  
    // 如果索引为1,就停止遍历  
    if (idx == 1) { 
       // 利用指针修改外面BOOL变量的值 
       *stop = YES; 
    } 
}]; 

数组排序

// 第一种
NSArray *array = [NSArray arrayWithObjects:@"2", @"3", @"1", @"4", nil nil]; 
// 返回一个排好序的数组,原来数组的元素顺序不会改变 
// 指定元素的比较方法:compare:
NSArray *array1 = [array sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"array1:%@", array1);

// 第二种
NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]];
NSArray *sortSetArray = [array sortedArrayUsingDescriptors:sortDesc];

// 第三种
NSArray *test = @[ 1.8T,2.0T,2.0T,3.0L,1.8T,1.8T,2.0T,3.0L,1.8T,2.0T,1.8T,1.8T, 2.0T,1.8T,2.0T,2.0T,3.2L,1.8T,1.8T,2.0T,2.0T,3.2L,2.0T,3.2L, ];
NSArray *array3 = [self getNewArray test];
// 返回一个排序好的数组
- (NSArray *)getNewArray:(NSArray *)array {
      NSArray *arrayM = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
      if (NSOrderedDescending == [obj1 compare:obj2 options:NSNumericSearch]) {  
          return (NSComparisonResult)NSOrderedDescending;  
      } 
      if (NSOrderedAscending==[obj1 compare:obj2 options:NSNumericSearch]) {  
          return (NSComparisonResult)NSOrderedAscending;  
      } 
      return (NSComparisonResult)NSOrderedSame; 
  }]; 
      return arrayM;
}

分组归类

使用场景 :根据NSAarry中NSDictionary的一个key值,将数组重新分组,下面是后台返回的数据:

(   
{brand_id = 1; brand_name = 奥迪; initial = A;},
{brand_id = 2; brand_name = 阿斯顿·马丁; initial = A;}, 
{brand_id = 11; brand_name = 保时捷; initial = B;}, 
{brand_id = 7; brand_name = 宝马; initial = B;}, 
{brand_id = 24; brand_name = 昌河; initial = C;},
{brand_id = 22; brand_name = 长城; initial = C;}
)

代码实现

NSArray *testArray = @[  
@{@"brand_id": @"1", @"brand_name": @"奥迪", @"initial": @"A"}, 
@{@"brand_id": @"2", @"brand_name": @"阿斯顿·马丁", @"initial": @"A"}, 
@{@"brand_id": @"3", @"brand_name": @"保时捷", @"initial": @"B"}, 
@{@"brand_id": @"4", @"brand_name": @"宝马", @"initial": @"B"}, 
@{@"brand_id": @"4", @"brand_name": @"昌河", @"initial": @"C"}, 
@{@"brand_id": @"5", @"brand_name": @"长城", @"initial": @"C"} ];

// 获取数组中所用的initial的value值,indexArray数组中是乱序排列的。
NSMutableArray *indexArray = [NSMutableArray array]; 
indexArray = [testArray valueForKeyPath:@"initial"];
// 将array装换成NSSet类型,重新排序生成新的数组
NSSet *indexSet = [NSSet setWithArray:indexArray];
NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]];
NSArray *sortSetArray = [indexSet sortedArrayUsingDescriptors:sortDesc];
// 遍历数组并进行归类
NSMutableArray *resultArray = [NSMutableArray array];
[sortSetArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
    // 根据NSPredicate获取array 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"initial == %@",obj]; NSArray *indexArray = [testArray filteredArrayUsingPredicate:predicate];  
    // 将查询结果加入到resultArray中
    [resultArray addObject:indexArray]; 
}];

过滤重复元素和排序

// 最简洁,但返回的结果是无序的。
NSArray *arr = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"]; 
NSSet *set = [NSSet setWithArray:arr]; 

// 去除相同元素并重新排序
NSArray *arr = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"]; 
NSSet *set = [NSSet setWithArray:arr]; 
NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]]; 
NSArray *sortSetArray = [set sortedArrayUsingDescriptors:sortDesc];

// 利用NSDictionary的AllKeys(AllValues)方法
NSArray *dataArray =@[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"]; 
NSMutableDictionary *dic = [[NSMutableDictionary alloc]initWithCapacity:0]; 
for(NSString *str in dataArray){  
    [dic setValue:str forKey:str]; 
} 
NSLog(@"%@",[dic allKeys]);

// 利用数组的containsObject来去除
NSArray *dataArray =@[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"]; 
NSMutableArray *listAry = [[NSMutableArray alloc]init];  
for (NSString *str in dataArray) {  
    if (![listAry containsObject:str]) { 
         [listAry addObject:str];  
    }  
} 
NSLog(@"%@",listAry); 





最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • 站在前辈的肩膀上前行 UIKit框架和Foundation框架 所有的Mac OS X和IOS程序都是由大量的对象...
    zysmoon阅读 8,616评论 0 16
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,943评论 4 60
  • 1.badgeVaule气泡提示 2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容...
    i得深刻方得S阅读 4,607评论 1 9
  • 那天忘记写了,娃上大班后没几天,跟我说大班和小班、中班果然不一样了:每天都吃鸡蛋,还说了其它的,我忘记了。说明她在...
    圈_圈_阅读 236评论 0 0
  • 【注意】本文包含《四重奏》第六集剧透。 由于《四重奏》的缘故,坂元裕二在我心目中的编剧排行榜上超越了魔法特,上升到...
    玛雅蓝阅读 518评论 2 1