博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于iOS去除数组中重复数据的几种方法
阅读量:7062 次
发布时间:2019-06-28

本文共 3187 字,大约阅读时间需要 10 分钟。

 

在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢?

第一种:利用NSDictionary的AllKeys(AllValues)方法

可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的。代码:

NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-03",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-04",@"2014-04-06",@"2014-04-08", @"2014-04-05",@"2014-04-07",@"2014-04-09",]; NSMutableDictionary *dic = [[NSMutableDictionary alloc]initWithCapacity:0]; for(NSString *str in dataArray) { [dic setValue:str forKey:str]; } NSLog(@"%@",[dic allKeys]);

打印结果:

(    "2014-04-09",    "2014-04-02",    "2014-04-08",    "2014-04-01",    "2014-04-07",    "2014-04-06",    "2014-04-05",    "2014-04-04",    "2014-04-03")

第二种方法:利用NSSet的AllObjects方法

这种方法更快,利用NSSet不会添加重复元素的特性。不过去重的数组没有进行排序,如果需要排序,可以使用NSSortDescriptor类。实例代码:

NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-03",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-04",@"2014-04-06",@"2014-04-08", @"2014-04-05",@"2014-04-07",@"2014-04-09",]; NSSet *set = [NSSet setWithArray:dataArray]; NSLog(@"%@",[set allObjects]);

打印结果:

(    "2014-04-01",    "2014-04-02",    "2014-04-03",    "2014-04-04",    "2014-04-06",    "2014-04-08",    "2014-04-05",    "2014-04-07",    "2014-04-09")

第三种方法,利用数组的containsObject来去除

代码如下:

NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-03",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-04",@"2014-04-06",@"2014-04-08", @"2014-04-05",@"2014-04-07",@"2014-04-09",]; NSMutableArray *listAry = [[NSMutableArray alloc]init]; for (NSString *str in dataArray) { if (![listAry containsObject:str]) { [listAry addObject:str]; } } NSLog(@"%@",listAry);

打印结果:

(    "2014-04-01",    "2014-04-02",    "2014-04-03",    "2014-04-04",    "2014-04-06",    "2014-04-08",    "2014-04-05",    "2014-04-07",    "2014-04-09")

第四种方法:利用keyValue的方式(自己不是太明白)

NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-03",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-04",@"2014-04-06",@"2014-04-08", @"2014-04-05",@"2014-04-07",@"2014-04-09",]; dataArray = [dataArray valueForKeyPath:@"@distinctUnionOfObjects.self"]; NSLog(@"%@",dataArray);

打印结果如下:

(      "2014-04-01",      "2014-04-02",      "2014-04-03",      "2014-04-04",      "2014-04-06",      "2014-04-08",      "2014-04-05",      "2014-04-07",      "2014-04-09"  )

总结:这几种方式都可以实现去除重复的数据,当然也可以用for循环的方式去除方法不再叙述;淡然也参考了别人的东西进行的总结

案例的使用:

服务器返回一个带有日期的数组,当然有重复的日期,同一个的日期的列表要在同一个地方的话,头部显示日期的话,可以使用到此方法去除重复的,当然,根据具体的情况代码和逻辑是不同的!

 

转载于:https://www.cnblogs.com/includeao/p/6400848.html

你可能感兴趣的文章
[C puzzle book] Preprocessor for C
查看>>
大牛博客(持续更新)
查看>>
day18-socket 编程
查看>>
jqgrid 行编辑/单元格selsect 下拉框并运用select2
查看>>
HTML链接与JavaScript链接
查看>>
EF框架学习手记
查看>>
ios播放声音中断后台音乐的问题
查看>>
iPhone-获取网络数据或者路径的文件名
查看>>
20145234黄斐《信息安全系统设计基础》第十一周学习总结(2)
查看>>
记一次python沙箱逃逸绕过(time based rce)
查看>>
ITIL图示
查看>>
NFS服务器搭建
查看>>
Android Toast.makeText用法
查看>>
C#模拟HTTP请求并发送二进制
查看>>
疯狂出逃办公室2
查看>>
03-我们怎样编写Product Backlog
查看>>
洛谷1466 集合
查看>>
C#耗时操作防界面卡死
查看>>
第三章 poj 1064——关于带精度的二分法
查看>>
安卓表格布局android:collapseColumns,android:shrinkColumns和stretchColumn
查看>>