我有一个NSMutableOrderedSet。我下载了一个" Person"对象。每个Person对象都有一个唯一的id。
仅添加尚未包含在NSMutableOrderedSet中的Person对象的最有效方法是什么?
我显然可以遍历整个集合,如果id最终不存在则添加它 - 但这似乎是最慢的方式。
想法?
我在做什么:
for (int x = 0; x < existingSet.Count; x++)
{
if ([personA isEqualto: personB])
break;
if (x == existingSet.Count - 1 && ![person isEqualto: personB])
[existingSet addObject: personA];
}
答案 0 :(得分:4)
你必须教你的人类什么是平等意味着什么,因为一个集合只会发现新对象,如果发现它们不等于任何其他对象。通过覆盖isEqual:
和hash
@interface Person : NSObject
@property (strong) NSNumber *identifier;
@end
@implementation Person
- (BOOL)isEqual:(id)object {
return [self.identifier isEqualToNumber: object.identifier];
}
- (NSUInteger)hash {
return [self.identifier hash]; // if the only field to determine uniqueness is `identifier`, this hashing method is enough
}
@end
比你所要做的只是
[existingSet addObject: personA];
这将导致与
相同的设置[existingSet addObject: personA];
[existingSet addObject: personA];
[existingSet addObject: personA];
[existingSet addObject: personA];
因为只能添加一个相等的对象。其他addObject:
调用将无声地失败。