美文网首页
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数组去重

    1.今天介绍一个数组去重的小方法,超级简单。 2.还有一种简单粗暴的for循环去重

  • Array集结号

    实现数组去重的几种方法 数组去重一 数组去重二 利用数组indexof+push实现数组去重 数组去重三 利用对象...

  • 实现数组去重有哪些方式

    简单的数组去重 数组对象去重

  • 数组去重的四种方法

    利用双for循环去重 利用对象数组去重 利用对象数组去重并且记录重复次数 通过创建一个新数组进行数组去重

  • js数组去重、对象数组去重

    普通数组去重 一、普通数组去重 方法一:遍历数组法 方法二:排序法 方法三:对象法 对象数组去重 方法一:将对象数...

  • javascript数组去重,数组对象去重

    利用Reduce去重 function unique(arr) {var obj = {};arr = arr.r...

  • js:数组去重

    数组去重的常见写法: 数组去重封装成方法: es6的数组去重(Array.from):

  • ES6数组去重

    普通数组去重 方法1 方法2 对象数组去重

  • js reduce去重用法

    reduce不仅仅可以数据累加,还可以实现去重效果。 重复次数计算 数组去重 数组对象去重,转为数组 对象去重

  • 数组去重

    传统方法 ES6 扩展 传统方法 最后再写到 Array.prototype 原型中

网友评论

      本文标题:OC数组去重

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