美文网首页iOS
数组去重 - iOS

数组去重 - iOS

作者: survivorsfyh | 来源:发表于2018-08-15 11:21 被阅读54次

    一.删除重复数据

    利用 valueForKeyPath 的方式

    NSArray *arrData = @[@1, @2, @3, @4, @5, @1, @2, @3];

    NSArray *arrResult = [arrData valueForKeyPath:@"@distinctUnionOfObjects.self"];

    NSLog(@"Result:\n%@", arrResult);

    同样,如果数组中存储的数据为对象的形式,也可以剔除对应 key 值的重复数据后再取值

    NSArray *arrData = @[@{@"name":@"zhangsan", @"age":@"20"}, @{@"name":@"lisi", @"age":@"19"}, @{@"name":@"wangwu", @"age":@"22"}, @{@"name":@"zhaoliu", @"age":@"20"}, @{@"name":@"zhangsan", @"age":@"17"}, @{@"name":@"caoqi", @"age":@"28"}, @{@"name":@"shaoba", @"age":@"24"}];

    // 根据 name 字段进行去重操作(注:若需要根据其它字段则将 name 字段变更为对应的字段即可 => @distinctUnionOfObjects.XXX)

    NSArray *arrResult = [arrData valueForKeyPath:@"@distinctUnionOfObjects.name"];

    NSLog(@"Result:\n%@", arrResult);

    二.对数组中元素去重

    1.开辟新内存空间,判断是否存在,遍历数组元素,若不存在则将该元素插入至新数组中,最终得到的结果顺序不发生变化.

    NSArray *arrData = @[@1, @2, @3, @4, @5, @1, @2, @3];

    NSMutableArray *arrResult = [NSMutableArray array];

    for (NSString *key in arrData) {

       if (![arrResult containsObject:key]) {

           [arrResult addObject:key];

       }

    }

    NSLog(@"Result:\n%@", arrResult);

    2.通过 NSDictionary 的 AllKeys(AllValues) 方式去重

    将 NSArray 中元素插入字典中,字典设置 key value 时,若存在则更新,反之则将其插入,然后再获取AllKyes 或 AllValues 进行去重,最终得到的结果是无序的,若需要有序,则还需要进行排序操作.

    NSArray *arrData = @[@1, @2, @3, @4, @5, @1, @2, @3];

    NSMutableDictionary *dicResult = [NSMutableDictionary dictionary];

    for (NSString *item in arrData) {

       [dicResult setObject:item forKey:item];

    }

    NSArray *arrResult = dicResult.allValues;

    NSLog(@"Result:\n%@", arrResult);// 若需要排序,则可通过快速枚举方式进行排序

    三.通过 NSSet 特性

    NSSet 特性:确定性、无序性、互异性

    通过 NSSet 特性将数组放入集合进行自动去重,但是它与字典一样是无序的,所以最终得到的结果是无序的.

    NSArray *arrData = @[@1, @2, @3, @4, @5, @1, @2, @3];

    NSSet *set = [NSSet setWithArray:arrData];

    NSArray *arrResult = [set allObjects];

    NSLog(@"Result:\n%@", arrResult);

    NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:arrData];// 有序集合

    NSLog(@"Result:\n%@", orderedSet.array);

    相关文章

      网友评论

        本文标题:数组去重 - iOS

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