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];
} ? ? ? ? ? ? ? ? ? ?