iPhone SDK嵌套For Loop性能

Ske*_*eep 0 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!");
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

上面代码的性能非常慢,我想知道是否有更好的方法来做到这一点?

kov*_*pas 5

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

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

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

添加:

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

从:

index - > NSDictionary

至:

id - > NSDictionary

你会发现O(1)而不是O(n)的元素.

重新映射.您应该使用适当的格式(id - > object)创建NSDictionary,也可以按以下方式重新映射数组:

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