美文网首页
OC数组去重

OC数组去重

作者: dalu | 来源:发表于2021-12-13 13:44 被阅读0次

    1.今天介绍一个数组去重的小方法,超级简单。

    原理依据KVC Collection Operators中的对象操作符
    
    对象操作符:@distinctUnionOfObjects/@unionOfObjects
    返回一个由操作符右边的 key path 所指定的对象属性组成的数组。
    
    其中@distinctUnionOfObjects 会对数组去重, 而且 @unionOfObjects 不会。
    如何嫌浪费时间,只看下面一段代码即可。
    
    NSArray* array = @[@"a",@"b",@"c",@"d",@"c",@"d",@"a"];
    NSArray* aArray = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];
    NSLog(@"%@",aArray);//a,b,c,d
    扩展:数组操作符 和 简单集合操作符
    数组操作符:@distinctUnionOfArrays / @unionOfArrays:返回了一个数组,其中包含这个集合中每个数组对于这个  操作符右面指定的 key path 进行操作之后的值。distinctUnionOfArrays会移除重复的值。
    例如:
    NSArray* array1 = @[@"a",@"b",@"c",@"d",@"c",@"d",@"a"];
    NSArray* array2 = @[@"r",@"b",@"c",@"d",@"9",@"d",@"0"];
    NSArray* aArray = [@[array1,array2] valueForKeyPath:@"@distinctUnionOfArrays.self"]; //a,b,r,c,d,0,9
    @min: 和@max一样,但是返回的是集合中的最小值
    @avg: 把集合中的每个对象都转换为double类型,返回一个值为平均值的NSNumber对象
    @sum: 首先把集合中的每个对象都转换为double类型,然后计算其总,最后返回一个值为这个总和的NSNumber对象
    例如:
    @interface Person : NSObject
    @property NSString *name;
    @property NSInteger age;
    @property NSDate *birthday;
    @end
    
    Name                      Age                Birthday
    xiaohong                13                September 21, 2007
    xiaoli                      20                  November 3, 2000
    xiaoming                23                June 11, 1997
    NSArray<Person*>*peoples 数组里装的是person对象
    [peoples valueForKeyPath:@"@max.age"];  // 23  最大年龄
    [peoples valueForKeyPath:@"@avg.age"];  // 平均年龄
    [peoples valueForKeyPath:@"@min.birthday"];  // 最小生日June 11, 1997
    

    2.还有一种简单粗暴的for循环去重

    -(NSMutableArray*)removeDunlicates:(NSMutableArray*)projectList{
        
        NSMutableArray* resultList = [[NSMutableArray alloc] init];
    
        for (NSInteger i=0; i<projectList.count; i++) {
            NSDictionary* iItem = projectList[i];
            BOOL flag = YES;
            for (NSInteger j=0; j<resultList.count; j++) {
                NSDictionary* jItem = resultList[j];
                if ([iItem[@"project_id"] isEqual:jItem[@"project_id"]]&&
                    [iItem[@"inner_net_ip"] isEqual:jItem[@"inner_net_ip"]]) {
                    flag = NO;
                    break;
                }
            }
            if (flag) {
                [resultList addObject:iItem];
            }
        }
        return resultList;
    }
    

    相关文章

      网友评论

          本文标题:OC数组去重

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