判斷數(shù)組中是否存在某元素,不存在則加入的兩種方法比較

問題

遇到一需求,需要將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)該是去遍歷了?不然為什么慢這么多

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容