时间:2018年8月13日 周一
数组相同对象进行分组,存储到新的数组
直接上实现代码
在设计上增强了方法的扩展性,可以对字符串、非字符串对象进行筛选,用了predicate方式进行筛选操作,具体实现如下:
/*
筛选数组中的对象的相同个数,分组存储,是自定义的对象
isString:是否字符串数组,不是的话就自定义对象数组,需要指定对象的筛选的key,即对象的属性名
*/
+ (NSArray *)filterMaxItemsArray:(NSArray *)array isStringObj:(BOOL)isString filterKey:(NSString *)key {
NSMutableArray *origArray = [NSMutableArray arrayWithArray:array];
NSMutableArray *filerArray = [NSMutableArray array];
while (origArray.count > 0) {
id obj = origArray.firstObject;
NSPredicate *predic = nil;
if (isString) {
predic = [NSPredicate predicateWithFormat:@"self == %@",obj];
}else {
id value = [obj valueForKey:key];
predic = [NSPredicate predicateWithFormat:@"self.%@ == %@",key,value];
}
NSArray *pArray = [origArray filteredArrayUsingPredicate:predic];
[filerArray addObject:pArray];
[origArray removeObjectsInArray:pArray];
}
return filerArray;
}
测试一下效果:
NSArray *array1 = @[@"2018-7-01",@"2018-7-02",@"2018-7-03",
@"2018-7-01",@"2018-7-02",@"2018-7-03",
@"2018-7-01",@"2018-7-02",@"2018-7-03",
@"2018-7-01",@"2018-7-02",@"2018-7-03",
@"2018-7-01",@"2018-7-02",@"2018-7-03",
@"2018-7-01",@"2018-7-02",@"2018-7-03",
@"2018-7-04",@"2018-7-06",@"2018-7-08",
@"2018-7-05",@"2018-7-07",@"2018-7-09"];
NSArray *darray = [DataTools filterMaxItemsArray:array1 isStringObj:YES filterKey:nil];
NSLog(@"%@",darray);
2018-08-13 10:35:25.042 testDemo[12908:6785403] (
(
"2018-7-01",
"2018-7-01",
"2018-7-01",
"2018-7-01",
"2018-7-01",
"2018-7-01"
),
(
"2018-7-02",
"2018-7-02",
"2018-7-02",
"2018-7-02",
"2018-7-02",
"2018-7-02"
),
(
"2018-7-03",
"2018-7-03",
"2018-7-03",
"2018-7-03",
"2018-7-03",
"2018-7-03"
),
(
"2018-7-04"
),
(
"2018-7-06"
),
(
"2018-7-08"
),
(
"2018-7-05"
),
(
"2018-7-07"
),
(
"2018-7-09"
)
)
对非字符串对象的筛选效果也是OK的,就是在传参的时候传要筛选对象的一个键名,就好了。
网友评论