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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,745评论 0 13
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,045评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,907评论 1 32
  • 自卑,像水一样包裹着我 我挣扎,我戳破,我快要爆炸 我毫无用处 我看见头顶上的光 她说她代表着希望 寒冷,寒冷却如...
    晴雨_a9fe阅读 1,522评论 0 1
  • 1,感恩我早早的自然醒起床了,2,感恩这美好所有的一切,3,感恩我是丰盛的,4,感恩我是富足的,5,感恩我是开心,...
    赖庆瑶新能源电动汽车广州阅读 1,315评论 0 0

友情链接更多精彩内容