2

我有一个数组(NSArrayNSMutableArray无关紧要):SpecID特定文件IDs(109234等)。而且我有一大堆所有文件ID: FilesID
我需要检查是否FilesID包含SpecID.

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

4

1 回答 1

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 直接加载到集合中,而不是从数组中转换它们,因为这会稍微更有效率,但除此之外,上面的方法可能就很简单了。可能有专门的算法会表现得更好,但只有在上述方法太慢时才探索这些选项。

于 2013-02-18T00:41:11.763 回答