ios - 获取数组A与数组B交点的反面

标签 ios objective-c arrays uitableview

快速提问。我有两个NSMutableArray:

Array 1: [A,B,C,D,E,F];
Array 2: [B,E,F];

请注意,数组2始终是数组1的子集-意味着存在的对象是数组2,当然也存在的对象也是数组1。

因此,我要构建的数组包含数组2中的不是的对象。
Array 3: [A,C,D];

我已经尝试使用this post中概述的相对补码,但生成的数组与数组1基本相同。它不会消除数组2中存在的对象。

我也尝试了answer here,但仍然没有得到我想要的。除非我真的做错了很明显的事情。

我猜想使用NSPredicate是更可取的。但是我愿意接受想法和暗示。

注意:仅出于上下文考虑,我这样做是为了更新UITableView,主要是出于数据过滤的目的。

谢谢!

更新

因此,到目前为止,所有给出的答案实际上对我来说都是一组简单的虚拟数据。但是,当我用实际数据进行测试时,创建的Array 3仍与Array 1相同。因此,我将提供有关我的资料的更多信息。

这两个数组都是NSMutablArray,用于存储字典对象。我实际上正在使用Parse.com,所以两个数组中的对象都是PFObject(如果我没记错的话,那只是NSObject)。我不知道这如何影响任何事情,但是是的,似乎没有用。

当我尝试逐步执行此过程时,这是screenshot from the console

到目前为止,感谢您的帮助。

最佳答案

您无需沿着谓词路线走,您可以清楚地知道要做什么,并且可以使用简单的本地API来表示。

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

NSArray* array3 = [mArray3 copy];

需要注意的重要事项:

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

对于一个被认为相等的对象,它们需要响应hashisEqual:,并且这些值必须在两个相等的对象之间匹配。关于平等can be read here的好文章。

如果PFObject简单地从NSObject继承,则相等性检查将非常基础。它将简单地通过询问“这些对象是否基于内存中的位置,是同一对象?”来检查是否相等。这可能可以解释为什么您的虚拟数据有效,而实际数据无效。

您需要子类PFObject使其了解内容。这意味着您可以覆盖hashisEqual:以提供更合理的相等性声明。例如,“根据“名称”属性的值,这些对象是否为同一对象”。由您决定什么使对象相等。

关于ios - 获取数组A与数组B交点的反面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22329863/

相关文章:

ios - 裁剪后无法绘制阴影

ios - 如何在 iOS 中使用 Swift 实现自定义 UICollectionViewCell

ios - Swift:++ 已弃用 - 替换的代码不起作用

iphone - 如何在 UITextField 中插入蓝色文本标记?

javascript - 从 Node.js 中的 Array 对象中删除特定属性

ios - Apple 文档示例代码中的 __block 是什么意思?

objective-c - 将 subview Controller 推到 UINavigationController 后崩溃

ios - 创建NSDictionary dictionaryWithObjectsAndKeys时发生无声崩溃

java - 如何将字符串转换为字节?

c++ - 在 C++ 中使用指针时的内存管理