得到阵列A和阵列B之间相交的相反方向

Gad*_*sli 1 arrays objective-c uitableview ios

快速的问题.我有两个NSMutableArray:

Array 1: [A,B,C,D,E,F];
Array 2: [B,E,F];
Run Code Online (Sandbox Code Playgroud)

请注意,数组2始终是数组1的子集 - 意味着存在的对象是数组2,也确实存在于数组1中.

所以我想要的是构建一个包含不在数组2中的对象的数组.就像这样

Array 3: [A,C,D];
Run Code Online (Sandbox Code Playgroud)

我已经使用在概述相对补尝试这个职位,但结果数组是基本相同的磁盘阵列1.它并不能消除存在于阵列2的对象.

我也在这里尝试了答案,但仍然没有得到我想要的东西.除非我真的做了一些非常明显错误的事情.

我想,使用NSPredicate是更可取的.但我对想法和提示持开放态度.

注意:仅针对上下文,我这样做是为了更新我的UITableView,主要用于数据过滤.

谢谢!


UPDATE

所以到目前为止给出的所有答案实际上都适用于我的简单虚拟数据集.但是当我使用我的真实数据进行测试时,创建的数组3仍然与数组1相同.因此,我将提供有关我的东西的更多信息.

两个数组都是NSMutablArray存储字典对象.我实际上正在使用Parse.com,因此两个数组中的对象都是PFObject(如果我没弄错的话,它只是NSObject).我不知道这对任何事情有什么影响,但是,似乎不起作用.

当我尝试逐步完成整个过程时,这是控制台屏幕截图.

谢谢你们的帮助到目前为止.

WDU*_*DUK 5

这里没有必要遵循谓词路由,你明确知道你想做什么,并且可以用简单的原生API来表达.

NSMutableArray *mArray3 = [NSMutableArray arrayWithArray:array1];
[mArray3 removeObjectsInArray:array2];

NSArray* array3 = [mArray3 copy];
Run Code Online (Sandbox Code Playgroud)

需要注意的重要事项:

removeObjectsInArray:

此方法假定otherArray中的所有元素都响应hash和isEqual:.

对于被认为相等的对象,他们需要响应hashisEqual:,并且对于那些值来匹配两个相等的对象.关于平等的好文章可以在这里阅读.

如果PFObject只是从NSObject继承,那么相等检查将是非常基本的.它只是通过询问"这些对象是否是基于内存中的位置的相同对象?"来检查是否相等.这可能解释了为什么您的虚拟数据有效,但实际数据却没有.

您需要子类化PFObject以使其了解内容.这意味着您可以覆盖hashisEqual:提供更合理的相等声明.例如,"这些对象是否是同一个对象,基于'name'属性的值".由您来定义使对象相等的内容.