0

我有两个NSArray包含整数值。我想从两个数组中获取公共值,为此我正在使用NSMutableSet.

这是我的代码

`

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

    NSMutableSet *set2 = [NSMutableSet setWithArray:array2];

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

`

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

array2 ( 2, 3 ) and values inNSMutableSet` 是

` set1 {( 2, 3 )}

设置2 {( 2, 3 )} `

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

[set2 intersectSet:set1];返回set2为空。

这段代码有什么问题。

请帮我解决这个问题。

4

1 回答 1

1

这里有几件事,你需要使用NSNumberwith NSMutableSet,你不能只使用 standard int

NSNumber 实际上是一个包装在 Class 中的 int,NSSet 在处理objects时需要 NSNumber 。

if 语句中的代码仅在(根据您上面的逻辑)这两个集合不相等时才会执行。(!isEqualToSet)。

但是 isEqualToSet 只有在 otherSet 的内容等于接收集的内容时才返回 YES,否则返回 NO。

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

理解这一点很重要。您想从这两组中获得共同的值。而 Intersect 将简单地从一组中删除另一组中找不到的值。

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

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

确保您使用的是 NSNumber。

于 2014-09-17T12:39:23.270 回答