我有一个字符串 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/