我有一个数组(NSArray
或NSMutableArray
无关紧要):SpecID
特定文件ID
s(109234
等)。我有大量所有文件ID
s:FilesID
我需要检查FilesID
是否包含SpecID
的所有元素。
所以问题是什么是最快和最有效的方法,除了简单地在循环中比较所有元素之外。可能有一些标准方法或有效算法?
答案 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
个对象,或者如果它们是自定义对象,它们应该覆盖hash
和isEqual:
。集合的效率主要取决于具有良好的hash
。基础课程,例如NSNumber
,NSString
等有良好的哈希值。
另外,如果可以的话,将ID直接加载到集合中而不是将它们从数组中转换,因为这会稍微提高效率,但除此之外,上面的内容可能很简单。可能有专门的算法可以表现得更好,但只有在上述过慢时才会探索这些选项。