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