这个问题是以前面试的时候,在最后一关的时候,只需要做出来,就可以入职了,可可惜老子做不出来,心里纠结,想了想,还是要写出来。
NSMutableSet *set=[NSMutableSet set];
NSMutableArray * _datas = [[NSMutableArray alloc] initWithCapacity:0];
[selectArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[set addObject:obj[@"shopid"]];//利用set不重复的特性,得到有多少组,根据数组中的MeasureType字段
}];
[set enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {//遍历set数组
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"shopid = %@", obj];//创建谓词筛选器
NSArray *group = [selectArray filteredArrayUsingPredicate:predicate];
[_datas addObject:group];
NSLog(@"数组--%@",group);
}];
以上这个比较复杂一点,我写个很理解的:
//这个可以是你请求的数据,数据格式是[{},{},{}];这种,里面是一堆无序的字典元素;
NSMutableArray *shopListArray= [[NSMutableArray alloc] initWithCapacity:0];
NSMutableSet *set=[NSMutableSet set];
//其实中间(下面这段语句不知道有什么用)
[shopListArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[set addObject:obj[@"truename"]];//利用set不重复的特性,得到有多少组,根据数组中的MeasureType字段
}];
[set enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {//遍历set数组
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"truename = %@", obj];//创建谓词筛选器
//同类字典元素组成的数组;
NSArray *group = [shopListArray filteredArrayUsingPredicate:predicate];
//rangArray就是获取到的同类字典元素组成的数组,然后此类数组作为元素组成的数组;
[rangArray addObject:group];
NSLog(@"数组--%@",group);
NSLog(@"分组- %@",rangArray);
}];
本文介绍了一种使用 Objective-C 进行数据分组的方法。通过综合利用 NSMutableSet 和 NSPredicate 的特性,实现对数组中字典元素按指定字段进行分组,并将分组后的结果存储为新数组。
2339

被折叠的 条评论
为什么被折叠?



