2

我正在尝试搜索NSDictionary存储在NSMutableArray

for (int k = 0; k < [onlyActiveArr count]; k++) {

    NSString *localID = [onlyActiveArr objectAtIndex:k];
    NSLog(@"%@",localID);

    int localIndex = [onlyActiveArr indexOfObject:localActiveCallID];
    NSLog(@"%d",localIndex);

    for (NSDictionary *dict in self.SummaryArr) {

        NSLog(@"%@",[dict objectForKey:@"ActiveID"]);

             if (![[dict objectForKey:@"ActiveID"] isEqualToString:localID]) {
                   NSLog(@"found such a key, e.g. %@",localID);

             }

    }
}

但我越来越

NSLog(@"found such a key, e.g. %@",localActiveCallID);

当 ID 仍然存在时SummaryArr,我正在检查字典中是否不存在localID从中检索到的 ID。onlyActiveArr

请建议我如何克服我的问题。

4

2 回答 2

4

在完成整个字典的处理之前,您无法确定某个键不存在。将一个布尔变量初始设置为NOYES如果您在字典中找到一个项目,则将其更改为 ,如下所示:

BOOL found = NO;
for (NSDictionary *dict in self.SummaryArr) {
     NSLog(@"%@",[dict objectForKey:@"ActiveID"]);
     found = [[dict objectForKey:@"ActiveID"] isEqualToString:localID];
     if (found) break;
}
if (!found) {
    NSLog(@"found such a key, e.g. %@",localID);
}
于 2013-06-13T10:24:04.167 回答
0

如果您喜欢谓词,那么您可以使用访问字典中不存在的键会产生 nil 值的事实,并创建一个谓词来过滤掉那些键为 nil 的字典。

如果结果的计数大于零,则您的键位于数组中的某个位置。不过,它不会告诉你在哪里。

一个片段来展示这个想法:

NSPredicate *keyPred = [NSPredicate predicateWithFormat: @"NOT ActiveID == nil"];                  

BOOL found = [[self.SummaryArr filteredArrayUsingPredicate: keyPred] count] > 0;

我不知道性能如何叠加,因此如果您的数据集很大,您可能需要检查执行时间是否在您的限制范围内。

于 2013-06-13T10:45:14.973 回答