两个相关的问题:
[NSSet setWithArray:]
时,会自动为您删除重复的对象吗? NSSet
您想要“重复”的意思?即如果您有一堆“大学 class ”对象,每个对象都有一个名称和科目编号,并且您想转移到NSSet,则只为给定名称保留每个大学 class 中的一个(例如,如果您有三个科目,微积分,您如何告诉它仅保留微积分的一个部分,即使它们的部分号不同,因此默认情况下也不认为它们是相同的)。 谢谢!让我知道这个问题是否还不清楚。我在想出一种表达方式时遇到了麻烦。
编辑:此问题特定于NSManagedObjects,其
isEqual:
方法不能被覆盖。 最佳答案
如果同一对象在数组中出现多次,则将其添加
返回的集仅一次。
-isEqual:
方法(和-hash
方法)确定平等。如果要将两个自定义对象视为相等,则应适当地覆盖它们,并且必须覆盖两者。通常使用这些对象,这样就可以看到实际上等效且通常可以互换的对象(但是单独的对象)。在您的示例中,听起来好像大学 class 的对象确实是“不同的”(即,即使它们可能共享相同的整体“微积分”主题,它们也代表不同的类),所以将这些对象实例称为“相等”似乎是有问题的。如果这是大型项目/代码库。对于您的情况,您可以考虑将对象逐个添加到集合中,并在添加时进行自己的比较,以确保获得每个“主题”之一。