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

标签 ios objective-c

我有一个数组(NSArrayNSMutableArray 无关紧要):特定文件 IDSpecID 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 对象,或者如果它们是自定义对象,它们应该覆盖 hashisEqual:。集合的效率主要取决于是否有一个好的hash。基础类(class),例如NSNumberNSString 等具有良好的哈希值。

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

关于ios - 在 Objective-C 中查找数组中的元素子数组的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927862/

相关文章:

iphone - NSLayoutConstraints 代码使 View 居中并保持其纵横比

ios - 在对象上找不到属性 'tableView'

ios - 当键是 NSNumber 时,我可以调用 nsdictionary 的 valueForKeyPath 吗?

ios - 在 HTTP 请求中保护 API key

IOS:如何在第一次登录 ios 时处理 View Controller

objective-c - iOS:在 ImageView 上绘制矩形并调整边框

objective-c - cocos2d 在不同目标上按顺序运行序列

ios - Swift 中从 Dictionary 获取 JSON 对象

ios - View Controller 的包装器应该是 View Controller 吗?

ios - "Arguments to methods are never optional"?