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

相關文章
相關標籤/搜索