在Objective-C中查找数组子元素的最有效方法是什么?

时间:2013-02-18 00:37:07

标签: ios objective-c

我有一个数组(NSArrayNSMutableArray无关紧要):SpecID特定文件ID s(109234等)。我有大量所有文件ID s:FilesID 我需要检查FilesID是否包含SpecID的所有元素。

所以问题是什么是最快和最有效的方法,除了简单地在循环中比较所有元素之外。可能有一些标准方法或有效算法?

1 个答案:

答案 0 :(得分:12)

你可以使用套装:

NSSet *specIDs = [NSSet setWithArray:specIDarray];
NSSet *fileIDs = [NSSet setWithArray:fileIDarray];

if ([specIDs isSubsetOfSet:fileIDs])
{
    // Your file IDs contains every ID found in specIDarray
}

为了有效地工作,理想情况下,对象应该是NSNumber个对象,或者如果它们是自定义对象,它们应该覆盖hashisEqual:。集合的效率主要取决于具有良好的hash。基础课程,例如NSNumberNSString等有良好的哈希值。

另外,如果可以的话,将ID直接加载到集合中而不是将它们从数组中转换,因为这会稍微提高效率,但除此之外,上面的内容可能很简单。可能有专门的算法可以表现得更好,但只有在上述过慢时才会探索这些选项。