关于iOS去除数组中重复数据的几种方法

 

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

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

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

  1. NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03",
  2. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  3. @"2014-04-01",@"2014-04-03",@"2014-04-03",
  4. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  5. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  6. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  7. @"2014-04-04",@"2014-04-06",@"2014-04-08",
  8. @"2014-04-05",@"2014-04-07",@"2014-04-09",];
  9. NSMutableDictionary *dic = [[NSMutableDictionary alloc]initWithCapacity:0];
  10. for(NSString *str in dataArray)
  11. {
  12. [dic setValue:str forKey:str];
  13. }
  14. NSLog(@"%@",[dic allKeys]);

打印结果:

  1. (
  2. "2014-04-09",
  3. "2014-04-02",
  4. "2014-04-08",
  5. "2014-04-01",
  6. "2014-04-07",
  7. "2014-04-06",
  8. "2014-04-05",
  9. "2014-04-04",
  10. "2014-04-03"
  11. )

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

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

  1. NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03",
  2. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  3. @"2014-04-01",@"2014-04-03",@"2014-04-03",
  4. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  5. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  6. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  7. @"2014-04-04",@"2014-04-06",@"2014-04-08",
  8. @"2014-04-05",@"2014-04-07",@"2014-04-09",];
  9. NSSet *set = [NSSet setWithArray:dataArray];
  10. NSLog(@"%@",[set allObjects]);

打印结果:

  1. (
  2. "2014-04-01",
  3. "2014-04-02",
  4. "2014-04-03",
  5. "2014-04-04",
  6. "2014-04-06",
  7. "2014-04-08",
  8. "2014-04-05",
  9. "2014-04-07",
  10. "2014-04-09"
  11. )

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

代码如下:

  1. NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03",
  2. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  3. @"2014-04-01",@"2014-04-03",@"2014-04-03",
  4. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  5. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  6. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  7. @"2014-04-04",@"2014-04-06",@"2014-04-08",
  8. @"2014-04-05",@"2014-04-07",@"2014-04-09",];
  9. NSMutableArray *listAry = [[NSMutableArray alloc]init];
  10. for (NSString *str in dataArray) {
  11. if (![listAry containsObject:str]) {
  12. [listAry addObject:str];
  13. }
  14. }
  15. NSLog(@"%@",listAry);

打印结果:

  1. (
  2. "2014-04-01",
  3. "2014-04-02",
  4. "2014-04-03",
  5. "2014-04-04",
  6. "2014-04-06",
  7. "2014-04-08",
  8. "2014-04-05",
  9. "2014-04-07",
  10. "2014-04-09"
  11. )

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

  1. NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03",
  2. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  3. @"2014-04-01",@"2014-04-03",@"2014-04-03",
  4. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  5. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  6. @"2014-04-01",@"2014-04-02",@"2014-04-03",
  7. @"2014-04-04",@"2014-04-06",@"2014-04-08",
  8. @"2014-04-05",@"2014-04-07",@"2014-04-09",];
  9. dataArray = [dataArray valueForKeyPath:@"@distinctUnionOfObjects.self"];
  10. NSLog(@"%@",dataArray);

打印结果如下:

  1. (
  2. "2014-04-01",
  3. "2014-04-02",
  4. "2014-04-03",
  5. "2014-04-04",
  6. "2014-04-06",
  7. "2014-04-08",
  8. "2014-04-05",
  9. "2014-04-07",
  10. "2014-04-09"
  11. )

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

案例的使用:

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

Resource Reference

 

关于iOS去除数组中重复数据的几种方法的更多相关文章

  1. iOS - 去除数组中重复数据的几种方法

    第一种:利用NSDictionary的AllKeys(AllValues)方法 代码: NSArray *dataArray = @[@"2018-02-01",@"20 ...

  2. php获取数组中重复数据的两种方法

    分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...

  3. JS去除数组中重复值的四种方法

    JS去除数组中重复值的四种方法 1 /// <summary>            o[this[i]] = "";  }      }       newArr.p ...

  4. Js中去除数组中重复元素的6种方法

    方法一: Array.prototype.method1 = function(){ var arr=[]; //定义一个临时数组 for(var i = 0; i < this.length; ...

  5. php去除数组中重复数据

    <?php /** * 去除数组中重复数据 * by www.jbxue.com **/ $input = array("a" => "green" ...

  6. iOS去除数组中重复的model数据

    // 去除数组中model重复 ; i < self.selectedModelArray.count; i++) { ;j < self.selectedModelArray.count ...

  7. PHP去除数组中重复数据的两个例子

    例一: <?php$input = array("a" => "green","", "red"," ...

  8. php 去除数组中重复元素

    去除数组中重复元素, 找了下可以一下两个函数 php array_flip()与array_uniqure() $arr = array(…………) ;// 假设有数组包含一万个元素,里面有重复的元素 ...

  9. JavaScript去除数组中重复的数字

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

随机推荐

  1. nodejs express template (模版)的使用 (ejs + express)

    var app=require("express").createServer(); app.set("view engine","ejs" ...

  2. hdu2553 N皇后问题

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. 【HDU】1846 Brave Game

    http://acm.hdu.edu.cn/showproblem.php?pid=1846 题意:二人博弈,1堆石子每次取1~m个,没有石子可取的输,输出先手胜利还是后手胜利. #include & ...

  4. 获取UILabel宽度的方法

    - (CGFloat)labelLength:(NSString *)str font:(CGFloat)font{ str = ISSTRING(str) ? str : @"" ...

  5. Centos 安装 NodeJS

    准备命令: yum -y install gcc make gcc-c++ openssl-devel wget 下载源码及解压: wget http://nodejs.org/dist/v0.10. ...

  6. Android开发环境的发展演变

    前几年Android的开发环境需要自己一个个把软件下载下来,如Android sdk.eclipse.ADT等,而且有些软件下载安装相当的麻烦,如eclipse,对于一个初学者来说,这是个完全陌生的软 ...

  7. web页面实现指定区域打印功能

    web页面实现指定区域打印功能 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内. 详细如下: <style media=print type="t ...

  8. [LintCode] Surrounded Regions 包围区域

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  9. [CareerCup] 15.6 Entity Relationship Diagram 实体关系图

    15.6 Draw an entity-relationship diagram for a database with companies, people, and professionals (p ...

  10. Hadoop.2.x_网站PV示例

    一.网站基本指标(即针对于网站用户行为而产生的日志中进行统计分析) 1. PV:网页浏览量(Page View页面浏览次数,只要进入该网页就产生一条记录,不限IP,统计点每天(较多)/每周/每月/.. ...