2013-10-28 81 views
1

读了文档中关于NSSet它说:谓词是在NSSet中查找对象的最有效方法吗?

您可以使用组来替代阵列当一个对象 是否包含在集 元素的顺序不是重要的测试和性能考虑。

这正是我需要的,因为性能对我来说非常重要。

所以我重写了最终会在NSSet中填充的类中的哈希值。

- (NSUInteger)hash 
{ 
    return [[self recordDate] hash]; 
} 

换句话说,recordDate在我的情况下总是唯一的,我期望在这里有独特的哈希值。

根据文档,似乎我可以在NSSet/NSMutableSet中查找对象的唯一方法是通过谓词。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recordDate == %@", recordDate]; 
NSSet *objectsWithDesiredWeek = [mySet filteredSetUsingPredicate:predicate]; 

我不确定,如果我不俯视的东西。这是在NSSet中查找对象的最有效方法吗?有没有像键/值?

+1

如果你想要一个关联容器,你可以使用'NSDictionary'。说实话,我不相信通过谓词查找一套物品是有效的。谓词不仅需要解释某种“程序”(类似于正则表达式),而且时间复杂度也很可能是O(n)。也就是说,谓词需要应用于所有对象,直到找到为止。 – CouchDeveloper

+1

您可能想询问您的问题,而不是您想象中的零件解决方案。 – Wain

+0

你也可以使用objectsPassingTest:找到你想要的东西。我不知道这是否更有效率。 – rdelmar

回答

0

我想我不明白这个问题。 NSSet具有内置方法containsObject。为什么这不符合你的需求?

+0

伊恩邓肯,我认为这是解决方案。后来我发现这篇文章帮助我更好地理解它:https://developer.apple.com/library/mac/documentation/cocoa/conceptual/Collections/Collections.html但是我也需要实现'hash'和' isEqual'使'containsObject'有效地工作,所以我明白了。 – Houman

相关问题