Mas*_*son 2 objective-c duplicates nsarray nsset ios
两个相关问题:
使用时[NSSet setWithArray:],是否会自动删除重复的对象?
你怎么能NSSet准确地说出你想要"重复"的意思?即如果您有一堆"大学课程"对象,每个对象都有一个名称和部分编号,并且您想要转移到NSSet,只保留给定名称的每个大学课程中的一个(例如,如果您有三个部分对于微积分,你怎么能告诉它只保留一段微积分,即使它们的剖面数不同,所以它们默认不会被认为是相同的).
谢谢!如果这个问题根本不清楚,请告诉我.我无法找到一种方法来说出来.
编辑:此问题特定于NSManagedObjects,其isEqual:方法无法重写.
从文档:
如果同一对象在数组中出现多次,则仅向返回的集添加一次.
通过-isEqual:方法(和-hash方法)在整个Cocoa中确定平等.如果您希望两个自定义对象被视为相等,则应该适当地覆盖它们,并且必须覆盖它们.通常使用这些对象,使得真正等效且通常可互换的对象(但是是单独的对象)可以这样看.在你的例子中,听起来大学课程对象确实是"不同的"(即,它们代表不同的类,即使它们可能共享相同的整体"微积分"主题),因此将这些对象实例称为"相等"似乎是有问题的如果这是一个大型项目/代码库.在您的情况下,您可以考虑逐个将对象添加到集合中,并在添加时进行自己的比较,以确保获得每个"主题"之一.