iOS - 判断数组是否相等

判断数组是否相等前,先介绍以下几种判断的机制,当然你也可以直接滑到底部去查看怎么判断数组相等,也可以直接去下载Demo,更快的解决问题:Demo传送门

将依次介绍containsObject,== ,isEqual:,isEqualToArray: ,filteredArrayUsingPredicate ,交并差集。

  • containsObject:
    官方API说明中这样写到:
    Returns a Boolean value that indicates whether a given object is present in the array
    iOS - 判断数组是否相等_第1张图片

    判断给定的一个Object是否存在数组中,因此判断两个数组是否一样,该方法不可行。containsObject实际是找到数组中的元素,使用isEqual:判断两个值是否一样。

    iOS - 判断数组是否相等_第2张图片

  • ==
    判断两个指针变量的地址是否指向同一个内存地址,是则返回true:

    iOS - 判断数组是否相等_第3张图片

  • isEqual:,isEqualToArray:
    判断每一项是否相等,可以判断数组是否相等,但前提是数组要有序,你要先根据某个元素进行统一排序,才可以使用:
    iOS - 判断数组是否相等_第4张图片
    iOS - 判断数组是否相等_第5张图片

  • 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中为12345
// [set1 intersectSet:set2];  //取交集后 set1中为1
// [set1 minusSet:set2];//取差集后 set1中为23     array1 与array2的差集
    [set2 minusSet:set1];//取差集后 set2中为45       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 ~

你可能感兴趣的:(IOS)