美文网首页为了更好的活着
iOS 数组相同对象进行分组,存储到新的数组

iOS 数组相同对象进行分组,存储到新的数组

作者: 东岳哥哥 | 来源:发表于2018-08-13 10:50 被阅读0次

    时间: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的,就是在传参的时候传要筛选对象的一个键名,就好了。

    相关文章

      网友评论

        本文标题:iOS 数组相同对象进行分组,存储到新的数组

        本文链接:https://www.haomeiwen.com/subject/fbuybftx.html