iOS 数组去重的几种经常使用方法

一、利用NSDictionary的AllKeys惟一性

使用方法:将数组元素存入字典,利用字典key的惟一性获取去重以后的AllKeys,即为去重后的数据。数组

特色:去重后的数组是无序的bash

NSArray *array = @[@"a", @"a", @"a", @"b", @"c"];
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    for (NSString *str in array) {
        [dic setObject:str forKey:str];
    }
    NSLog(@"%@",dic.allKeys);
复制代码

二、建立新数组

使用方法:经过数组的containsObject函数判断数据在新数组中是否存在,不存在则加入新数组,存在则放弃。函数

特色:去重后的数组顺序不变ui

NSArray *array = @[@"a", @"a", @"a", @"b", @"c"];
    NSMutableArray *newArray = [NSMutableArray array];
    for (NSString *str in array) {
        if (![newArray containsObject:str]) {
            [newArray addObject:str];
        }
    }
    NSLog(@"%@", newArray);
复制代码

三、利用NSSet/NSOrderedSet存储数据的互异性

使用方法:将数据存入NSSet/NSOrderedSet中,再将NSSet/NSOrderedSet转为数组spa

特色:NSSet获得的数据是无序的、NSOrderedSet获得的数据是有序的code

NSArray *array = @[@"a", @"a", @"a", @"b", @"c"];
    NSSet *set = [NSSet setWithArray:array];
    NSArray *newArray = [set allObjects];
    NSLog(@"%@", newArray);
    
    ///得到的是去重以后的有序数组
    NSOrderedSet *orderSet = [NSOrderedSet orderedSetWithArray:array];
    NSArray *newArray = [orderSet array];
    NSLog(@"%@", newArray);
复制代码

四、利用valueForKeyPath去重

使用方法:经过valueForKeyPath中的对象操做符@distinctUnionOfObjects实现数组去重对象

特色:去重后的数组是无序的string

NSArray *array = @[@"a", @"a", @"a", @"b", @"c"];
    NSArray *newArray = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];
    NSLog(@"%@", newArray);
复制代码

补充:与@distinctUnionOfObjects对应的返回keyPath指定对象的不去重数组。it

Person *person1 = [[Person alloc] init];
    person1.name = @"aab";
    
    Person *person2 = [[Person alloc] init];
    person2.name = @"aab";
    
    Person *person3 = [[Person alloc] init];
    person3.name = @"aac";

    NSArray *personArray = @[person1, person2, person3];
    NSArray *nameArray = [personArray valueForKeyPath:@"@unionOfObjects.name"];
    NSLog(@"%@", nameArray);
//输出结果以下
(
    aab,
    aab,
    aac
)
复制代码

在写这篇小记的时候发现valueForKeyPath还有不少有趣的用法,限于篇幅就不过多的讲解。等有空单独写一篇进行讲解。io

相关文章
相关标签/搜索