OC数组去重

2021-12-13  本文已影响0人  dalu

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;
}
上一篇 下一篇

猜你喜欢

热点阅读