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

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

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

第一种:利用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循环的方式去除方法不再叙述;淡然也参考了别人的东西进行的总结

案例的使用:

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

Resource Reference

时间: 2025-01-06 02:09:25

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

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

今天工作遇到此问题,尝试多个方法不尽人意,故此写个博客来总结一下如何在js中去除重复元素. 方法1:         Array.prototype.method1 = function(){             var arr[];    //定义一个临时数组             for(var i = 0; i < this.length; i++){    //循环遍历当前数组                 //判断当前数组下标为i的元素是否已经保存到临时数组          

Js中去除数组中重复元素的几种方法

方法1: 1 Array.prototype.method1=function(){ 2 var arr=[]; 3 for(var i=0;i<this.length;i++){ 4 if(arr.indexOf(this[i]) == -1){ 5 arr.push(this[i]); 6 } 7 } 8 return arr; 9 } 方法2: 1 Array.prototype.method2 = function(){ 2 var h{}; //定义一个hash表 3 var arr[

php去除数组中重复数据

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

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

// 去除数组中model重复 for (NSInteger i = 0; i < self.selectedModelArray.count; i++) { for (NSInteger j = i+1;j < self.selectedModelArray.count; j++) { AssistantModel *tempModel = self.selectedModelArray[i]; AssistantModel *model = self.selectedModelArray[

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

例一: <?php$input = array("a" => "green","", "red","b" => "green", "","blue", "red","c" => "witer","hello","witer")

C语言去除数组中重复的字符简单例子

#include <stdio.h> int main(void){ int a[10]={1,2,3,3,4,5,1,3,5,6}; int i,j; int zieo=0; for(i=0;i<10;i++) for(j=i+1;j<10;j++) { if(a[i]==a[j]) { a[j]=0; } } for(i=0;i<10;i++) { if(a[i]!=zieo) { printf("%d\t",a[i]); } } printf(&qu

几种去除数组中重复元素的方法

工作中遇到的一个问题,就是去除数组中重复的元素,记录一下几种有效的方法: 第一种思路:遍历要删除的数组arr, 把元素分别放入另一个数组tmp中,在判断该元素在arr中不存在才允许放入tmp中. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>去除数组重复项</title> </head> &

C# 移除数组中重复数据

#region 移除数组中重复数据 /// <summary> /// 移除数组中重复数据 /// </summary> /// <param name="array">需要除重的数组</param> /// <returns>不重复数组</returns> public static string[] DelRepeatData(string[] array) { return array.GroupBy(p =

去除数组中重复元素

问题 统计一个一维数组中的各个元素的个数,然后删除多出来的重复元素,并输出结果. 例如:[1,2,2,2,3,3,3,3,3]-->[1,2,3] 解决思路 将重复元素的列表中的重复元素进行统计,并将统计结果放在dictionary中,key为元素,value为该元素的个数 然后通过for获取key,得到一个新的列表,就是没有重复元素的列表 解决(Python) #!/usr/bin/env python #coding:utf-8 def count_element(one_list): el