您的位置:首页 > 移动开发 > IOS开发

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

2017-03-28 09:08 288 查看

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

)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息