2

两个相关问题:

  1. 当您使用[NSSet setWithArray:]时,它会自动为您删除重复的对象吗?

  2. 你怎么能NSSet准确地说出你想要“重复”的意思?即,如果您有一堆“大学课程”对象,每个对象都有一个名称和部分编号,并且您想转移到 NSSet,只为给定名称保留每个大学课程中的一个(例如,如果您有三个部分微积分,你怎么告诉它只保留一个微积分部分,即使它们的部分编号不同,所以默认情况下它们不会被认为是相同的)。

谢谢!让我知道这个问题是否不清楚。我很难找到一种表达方式。

编辑:这个问题是特定于 NSManagedObjects 的,它的isEqual:方法不能被覆盖。

4

1 回答 1

7
  1. 文档中:

    如果同一对象在数组中出现多次,则仅将其添加到返回集合中一次。

  2. 在这里,平等是通过-isEqual:方法(和-hash方法)在整个 Cocoa 中确定的。如果您希望两个自定义对象被视为相等,则应适当地覆盖它们,并且必须同时覆盖它们。通常使用这些对象,以便可以将真正等效且通常可互换的对象(但是单独的对象)视为此类对象。在您的示例中,听起来大学课程对象确实是“不同的”(即,它们代表不同的课程,即使它们可能共享相同的整体“微积分”主题),因此将这些对象实例称为“相等”似乎有问题如果这是一个大型项目/代码库。在您的情况下,您可能会考虑将对象逐个添加到集合中,并在添加时进行自己的比较,以确保获得每个对象之一“

于 2011-08-17T20:25:42.640 回答