IOS 数组去重方法

2018-06-12  本文已影响33人  奋斗吧_程序猿

1.使用字典key的唯一方法去重;如果key值相同,则不会再往字典中添加数据。

代码实现

NSArray *checkArray =@[@(111), @(222),@(555), @(222),@(111)];    
    // 声明一个可变字典,用key的唯一性
    NSMutableDictionary *dic = [[NSMutableDictionaryalloc]initWithCapacity:0];
    for(NSString *strin checkArray)
    {
        [dic setValue:strforKey:str];
    }
    NSLog(@"%@",[dicallKeys]);

打印结果
2017-03-27 20:54:28.049 数组去重[3809:230991] (
111,
222,
555
)

2使用集合NSSet的初始化方法,简单暴力。

NSArray *checkArray =@[@(111), @(222),@(555), @(222),@(111)];
    // 直接调用集合是类初始化方法。
    NSSet *set = [NSSetsetWithArray:checkArray];
    NSLog(@"%@",[setallObjects]);

打印结果
2017-03-27 21:03:54.071 数组去重[3874:236584] (
111,
555,
222
)

NSArray *checkArray =@[@(111), @(222),@(555), @(222),@(111)]; 
NSOrderedSet *set = [NSOrderedSetorderedSetWithArray:checkArray]; 
NSLog(@”%@”, set.array);

打印结果:
2017-03-27 21:12:58.619 数组去重[3936:242301] (
111,
222,
555
)

3.类似冒泡法的实现原理,逻辑简单,顺序不会变化

 NSArray *checkArray =@[@(111), @(222),@(555), @(222),@(111)];
    NSMutableArray *containArray = [[NSMutableArrayalloc] init];
    for (unsigned i =0; i < [checkArray count]; i++){
        if ([containArraycontainsObject:[checkArrayobjectAtIndex:i]] == NO){
            [containArray addObject:[checkArrayobjectAtIndex:i]];
        }
    }
    NSLog(@"%@",containArray);

打印结果
2017-03-27 21:06:57.416 数组去重[3897:238906] (
111,
222,
555
)

4.使用valueForKeyPath:

NSArray *checkArray =@[@(111), @(222),@(555), @(222),@(111)];
    checkArray = [checkArray valueForKeyPath:@"@distinctUnionOfObjects.self"];
    NSLog(@"%@",checkArray);

打印结果:
2017-03-27 21:16:18.912 数组去重[3967:244528] (
111,
555,
222
)

上一篇下一篇

猜你喜欢

热点阅读