美文网首页
判断数组中是否存在某元素,不存在则加入的两种方法比较

判断数组中是否存在某元素,不存在则加入的两种方法比较

作者: 无物见心 | 来源:发表于2017-05-16 12:30 被阅读0次

问题

遇到一需求,需要将b数组中的元素加入至a数组,且确保a数组元素的唯一性。

NSArray *arrayA = @[@"12345",@"23456",@"34567",@"45678",@"56789",@"678910",@"7891011",@"89101112",@"910111213",@"1011121314",@"1112131415",@"1213141516",@"1314151617",@"1415161718",@"1516171819"];
NSArray *arrayB = @[@"1617181920",@"17181920",@"56789"];

想到的两种方法:

//方法一
NSLog(@"~~");
NSMutableArray *newArr = [NSMutableArray arrayWithArray:arrayA];
for (NSString *str in arrayB) {
    if(![newArr containsObject:str]){
        [newArr addObject:str];
    }
}
NSLog(@"~~");

//方法二
NSLog(@"~~");
NSMutableSet *set = [NSMutableSet setWithArray:array];
for (NSString *str in addArr) {
    [set addObject:str];
}
NSLog(@"~~");

简单的比较了下效率,数据量少的时候log看不出差别,而后把arrayB扩大到16696个的时候,体现出了方法二的优势:

屏幕快照 2017-05-16 下午12.26.09.png

而后注意到NSMutableSet有一个从数组中添加元素的方法,就一起试了一下:

//方法三
NSLog(@"~~");
NSMutableSet *set1 = [NSMutableSet setWithArray:array];
[set1 addObjectsFromArray:addArr];
NSLog(@"~~");

结果还是方法二快了一些,for in的原因吗?:

屏幕快照 2017-05-16 下午2.00.44.png

结论

利用NSSet的唯一性特性(利用了Hash Table),明显在数据量大的时候效率比较高。
NSArray 的containsObject 这个方法,内部应该是去遍历了?不然为什么慢这么多

相关文章

网友评论

      本文标题:判断数组中是否存在某元素,不存在则加入的两种方法比较

      本文链接:https://www.haomeiwen.com/subject/kxklxxtx.html