NSArray 比較相同 方法

tips:不想看研究過程的直接拉到最下面。

?項目中遇到 比較數組是否相同的方法 解決后在此做一總結?

數組比較相同 首先很多同學會想到遍歷的方法 但是是不是會有點太費了

要遍歷 ?還要一個個比較 ?太坑了 不能接受 ?我就在想有沒有什么比較

代價小且方便的方法呢 ?

下面就來了 ?

1 - ?1?

有沒有一行代碼就能解決問題的方法呢。 這就來了。

NSArray *array1 = @[@"i",@"o",@"s"];

NSArray *array2 = @[@"i",@"o",@"s"];

if ([array1 isEqualToArray:array2]) {

NSLog(@"BHT isEqualToArray work");

}

看來 cocoa框架確實強大 只要你想到的就有 ?于是屁顛顛 把這樣的代碼加到工程?

過兩天 bug來了 ?說 你這個怎么判斷不同啊 ?明明相同啊 ?我說怎么會?

不要質疑一個 雖然是新手的iOS開發菜鳥的代碼?

可當我調試起來 才發現 真的打臉了 ?

仔細看 才發現原來 數組雖然每個元素都相同 但是 順序卻不同?

怎么解決呢 ?這就告訴你?

2 - 2 轉換成 NSSet?

NSArray *array1 = @[@"i",@"o",@"s"];

NSArray *array2 = @[@"i",@"s",@"o"];

NSSet *set1 = [NSSet setWithArray:array1];

NSSet *set2 = [NSSet setWithArray:array2];

if ([set1 isEqualToSet:set2]) {

NSLog(@"BHT isEqualToSet work");

}

果斷成功。~?


總結驗證下 ?



看了 log ?果斷成功 不管順序怎么變 ?轉換成set 都可以解決問題



自取方法?


1.對比較連順序也有要求的請用

- (BOOL)compareArr:(NSArray *)array1 With:(NSArray *)array2{

return? [array1 isEqualToArray:array2];

} ? ? ? ? ? ? ? ? ? ? ? ? ??

2.對比較連順序無要求 只需比較是否相同的請用

- (BOOL)compareArr:(NSArray *)array1 With:(NSArray *)array2{

NSSet *setOld = [NSSet setWithArray:array1];

NSSet *setNew = [NSSet setWithArray:array2];

return [setOld isEqualToSet:setNew];

} ? ? ? ? ? ? ? ? ? ?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容