iPhone SDK 嵌套 For 循环性能

标签 iphone cocoa

我有一个字符串 id 的 NSArray 和一个 NSDictionary 对象的 NSDictionary。我当前正在循环遍历字符串 id 数组以匹配 NSDictionary 中的 id 值。

大约有 200 个 NSDictionary 对象,而只有 5 个左右的字符串 ID。

我当前的代码是这样的:

for (NSString *Str in aArr) {
        for (NSDictionary *a in apArr)
        {
            if ([a objectForKey:@"id"] == Str)
            {
            NSLog(@"Found!");
            }
        }
}

上述代码的性能确实很慢,我想知道是否有更好的方法来做到这一点?

最佳答案

我将通过以下方式实现您的代码:

for (NSDictionary *a in apArr)
{
    if ([aArr containsObject:[a objectForKey:@"id"]])
    {
        NSLog(@"Found!");
    }
}

我仍然不确定 containsObject 的性能,但是,我想应该有 SDK 优化来比 O(n) 更快地查找对象。

已添加:

另一个建议。我想,“id”字段对于所有 NSDictionary 对象都是唯一的。如果是这样,您可以将 NSDictionaries 的 NSArray 重新映射到 NSDictionary:

来自:

索引 -> NSDictionary

至:

id -> NSDictionary

您将找到 O(1) 而不是 O(n) 的元素。

重新重新映射。您应该使用适当的格式(id -> 对象)创建 NSDictionary,或者可以通过以下方式重新映射数组:

NSMutableDictionary *md = [[NSMutableDictionary alloc] init];
for ( NSDicationary *a in apArr ) {
    [md setObject:a forKey:[a objectForKey:@"id"]];
}

关于iPhone SDK 嵌套 For 循环性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2727829/

相关文章:

objective-c - 从受信任的应用程序访问 OS X 钥匙串(keychain)项

objective-c - 从文件中读取 NSMutableArray

objective-c - 为什么在基于导航的应用程序上单击后退按钮时未调用 viewdidunload 函数

iphone - 发布到 Google+(Google 加)

objective-c - 防止 UIPopover 在 iPhone 6 plus 上横向显示为 UIPageSheet

iOS 7 XCode 5 Storyboard 将方向设置为横向

html - 在 HTML 和 CSS 中使图像移动响应

iphone - 检查新的 SDK 调用?

iphone - 将 NSString 转换为 NSInteger

objective-c - iTunes 使用什么 Cocoa View 来显示库面板?