我有一个数组(NSArray
或NSMutableArray
无关紧要):SpecID
特定文件ID
s(109234
等)。而且我有一大堆所有文件ID
: FilesID
。
我需要检查是否FilesID
包含SpecID
.
所以问题是什么是最快和最有效的方法,除了在循环中简单地比较所有元素。可能有一些标准方法或有效算法吗?
我有一个数组(NSArray
或NSMutableArray
无关紧要):SpecID
特定文件ID
s(109234
等)。而且我有一大堆所有文件ID
: FilesID
。
我需要检查是否FilesID
包含SpecID
.
所以问题是什么是最快和最有效的方法,除了在循环中简单地比较所有元素。可能有一些标准方法或有效算法吗?
你可以使用集合:
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 直接加载到集合中,而不是从数组中转换它们,因为这会稍微更有效率,但除此之外,上面的方法可能就很简单了。可能有专门的算法会表现得更好,但只有在上述方法太慢时才探索这些选项。