【发布时间】:2013-11-07 22:51:19
【问题描述】:
阅读有关 NSSet 的文档说:
您可以使用集合作为数组的替代品,当 元素并不重要,性能在测试一个对象是否 包含在集合中是一个考虑因素。
这正是我所需要的,因为性能对我来说非常重要。
所以我已经覆盖了最终将填充到 NSSet 中的类中的哈希。
- (NSUInteger)hash
{
return [[self recordDate] hash];
}
换句话说,在我的情况下,recordDate 总是唯一的,我希望这里有唯一的哈希值。
根据文档,我可以在 NSSet/NSMutableSet 中查找对象的唯一方法似乎是通过谓词。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recordDate == %@", recordDate];
NSSet *objectsWithDesiredWeek = [mySet filteredSetUsingPredicate:predicate];
我不确定,如果我没有忽略某些东西。这是在 NSSet 中查找对象的最有效方法吗?没有Key/Value之类的东西吗?
【问题讨论】:
-
如果你想要一个关联容器,你可以使用
NSDictionary。老实说,我不相信通过谓词查找集合中的项目是有效的。不仅谓词是某种需要解释的“程序”(类似于正则表达式),而且时间复杂度也很可能是 O(n)。也就是说,谓词需要应用于所有对象,直到找到一个。 -
您可能想询问您的问题,而不是您想象的部分解决方案。
-
你也可以使用 objectsPassingTest: 来找到你想要的。我不知道这样是否更有效率。
标签: ios ios7 nspredicate nsset nsmutableset