我有一个数组(NSArray
或 NSMutableArray
无关紧要):特定文件 ID
的 SpecID
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
。基础类(class),例如NSNumber
、NSString
等具有良好的哈希值。
此外,如果可以的话,将您的 ID 直接加载到集合中,而不是从数组中转换它们,因为这样效率会稍微高一些,但除此之外,上面的内容可能已经很简单了。可能有专门的算法会表现得更好,但只有在上述算法太慢的情况下才会探索这些选项。
关于ios - 在 Objective-C 中查找数组中的元素子数组的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927862/