iOS开发数组去重方法,排序去重和包含元素

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shaohua_lv/article/details/67631706

iOS开发数组去重、包含元素


工作中难免会遇到需要去除数组中的重复数据,笔者总结到几个方法,分享出来供大家参考

一、使用字典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
)

二、使用集合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
)

如上打印,NSSet得出结果是无续的,如果想要有序的可以
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
)

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

    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
)

四、使用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
)

展开阅读全文

没有更多推荐了,返回首页