問題
遇到一需求,需要將b數(shù)組中的元素加入至a數(shù)組,且確保a數(shù)組元素的唯一性。
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(@"~~");
簡(jiǎn)單的比較了下效率,數(shù)據(jù)量少的時(shí)候log看不出差別,而后把a(bǔ)rrayB擴(kuò)大到16696個(gè)的時(shí)候,體現(xiàn)出了方法二的優(yōu)勢(shì):

屏幕快照 2017-05-16 下午12.26.09.png
而后注意到NSMutableSet有一個(gè)從數(shù)組中添加元素的方法,就一起試了一下:
//方法三
NSLog(@"~~");
NSMutableSet *set1 = [NSMutableSet setWithArray:array];
[set1 addObjectsFromArray:addArr];
NSLog(@"~~");
結(jié)果還是方法二快了一些,for in的原因嗎?:

屏幕快照 2017-05-16 下午2.00.44.png
結(jié)論
利用NSSet的唯一性特性(利用了Hash Table),明顯在數(shù)據(jù)量大的時(shí)候效率比較高。
NSArray 的containsObject 這個(gè)方法,內(nèi)部應(yīng)該是去遍歷了?不然為什么慢這么多