【问题标题】:Are predicates the most efficient way to lookup an object in NSSet?谓词是在 NSSet 中查找对象的最有效方法吗?
【发布时间】: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


【解决方案1】:

我想我不明白这个问题。 NSSet 有内置方法 containsObject。为什么这不能满足您的需求?

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 2014-10-15
  • 2020-04-15
  • 2013-11-23
  • 1970-01-01
相关资源
最近更新 更多