isEqualToSet未返回正确的值

时间:2014-09-17 12:22:17

标签: ios ios7 nsmutableset

我有两个包含整数值的NSArray。我想从两个数组中获取常用值,并且使用NSMutableSet

这是我的代码

`

    NSMutableSet *set1 = [NSMutableSet setWithArray:array1]];

    NSMutableSet *set2 = [NSMutableSet setWithArray:array2];

    if (![set1 isEqualToSet:set2])
    {
        [set2 intersectSet:set1];
        NSArray  *commonArray = [set2  allObjects];
     }

`

这是数组中的值 `    数组1    (     2,     3    )

数组2    (      2,      3    ) and values in NSMutableSet`是

`   设置1   {(     2,     3   )}

SET2   {(     2,     3   )} `

根据条件和值,代码不会执行if()条件内的行。但是这里if()条件返回错误的值。

[set2 intersectSet:set1];也将set2视为空。

此代码有任何问题。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

这里有几件事,你需要NSNumber使用NSMutableSet,你不能只使用标准的int

NSNumber实际上是一个包含在类中的int,NSSet需要NSNumber,因为它处理对象

if语句中的代码只有在(按照上面的逻辑)两个集合不相等时才会执行。 (!isEqualToSet)。

但是,如果otherSet的内容等于接收集的内容,则isEqualToSet仅返回YES,否则返回NO。

最后intersectSet 从接收集中删除不是另一个给定集的成员的每个对象。 - 产生交集。

这一点很重要。您希望从两组中获取常用值。而Intersect只会删除来自另一组而不是的值。

因此[set2 intersectSet:set1];检查第1组中的哪些值也存在于第1组中。

因此,在调用[set2 intersectSet:set1];之后,Set 2将包含两个集合之间共有的任何值。

确保使用的是NSNumber。