iOS
来源:互联网 发布:网络新媒体就业前景 编辑:程序博客网 时间:2024/06/05 20:00
判断数组是否相等前,先介绍以下几种判断的机制,当然你也可以直接滑到底部去查看怎么判断数组相等,也可以直接去下载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。两者是不一样的。
- 好了,判断两个数组是否相等:
使用交集的概念,根据交集获取到set集合count和数组count做对比:
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 ~