判断数组是否相等前,先介绍以下几种判断的机制,当然你也可以直接滑到底部去查看怎么判断数组相等,也可以直接去下载Demo,更快的解决问题:Demo传送门
将依次介绍containsObject,== ,isEqual:,isEqualToArray: ,filteredArrayUsingPredicate ,交并差集。
containsObject:
官方API说明中这样写到:
Returns a Boolean value that indicates whether a given object is present in the array
判断给定的一个Object是否存在数组中,因此判断两个数组是否一样,该方法不可行。containsObject实际是找到数组中的元素,使用isEqual:判断两个值是否一样。
==
判断两个指针变量的地址是否指向同一个内存地址,是则返回true:
isEqual:,isEqualToArray:
判断每一项是否相等,可以判断数组是否相等,但前提是数组要有序,你要先根据某个元素进行统一排序,才可以使用:
filteredArrayUsingPredicate
字面意思根据使用的谓词条件去过滤数组,苹果官方的API是这样子描述的:
Evaluates a given predicate against each object in the receiving array and returns a new array containing the objects for which the predicate returns true.
也就是:根据用户给定的谓词/条件去评估接收到的数组中的每一个对象,And 返回评估条件为真的对象组成的新数组。
例子,判断用户选择的和未选择的:
NSArray *arr1 = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G", nil];
NSArray *arr2 = [NSArray arrayWithObjects:@"B",@"C",@"D",@"E",nil];//用户选择
//用户选择
NSArray *selectTure = [arr1 filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF in %@", arr2]];
NSLog(@"用户选择的正确答案 -> %@", selectTure);
NSArray *unselectTure = [arr1 filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"NOT (SELF in %@)", arr2]];
NSLog(@"用户没选择的正确答案 -> %@", unselectTure);
NSArray *array1 = @[@"2",@"3",@"1"];
NSArray *array2 = @[@“1”,@“4”,@“5”];
NSMutableSet *set1 = [NSMutableSet setWithArray:array1];
NSMutableSet *set2 = [NSMutableSet setWithArray:array2];
// [set1 unionSet:set2];//取并集后 set1中为1,2,3,4,5
// [set1 intersectSet:set2]; //取交集后 set1中为1
// [set1 minusSet:set2];//取差集后 set1中为2,3 array1 与array2的差集
[set2 minusSet:set1];//取差集后 set2中为4,5 array2 与array1的差集
NSLog(@"set1-------》%@",set1);
NSLog(@"set2-------》%@",set2);
注意:在本例中,网上有些博客和文章在算差集的时候,会得出结果:2,3,4,5.这是不正确的
差集:A与B的差集写做:A-B ;B与A的差集:B-A。两者是不一样的。
NSArray *array1 = @[@"2",@"3",@"1"];
NSArray *array2 = @[@"1",@"2",@"3",@"4"];
NSMutableSet *set1 = [NSMutableSet setWithArray:array1];
NSMutableSet *set2 = [NSMutableSet setWithArray:array2];
[set1 intersectSet:set2]; //取交集后 set1中为1
if (set1.count < array1.count) {
NSLog(@"两者不相等,说明arr1包含有arr2没有的数据");
}else if(set1.count == array1.count){
if (set1.count == array2.count) {
NSLog(@"array2 == array1 数组相等");
}else{
NSLog(@"arr2大于arr1的数据");
}
}else{
NSLog(@"交集count > arr1的count,算法出错了了了了");
}
测了很多情况,不存在问题。当然,也可能是我考虑不周,如果你发现了问题,请及时指出,纠正错误。再进一步。若使用代码,请根据具体情况调试。
Demo传送门 ,有帮助的话请点Star ~