在NSMutableArray中的NSDictionary商店中搜索字符串

时间:2013-06-13 10:18:34

标签: objective-c xcode for-loop nsarray nsdictionary

我正在尝试搜索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);

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

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

2 个答案:

答案 0 :(得分:4)

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

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);
}

答案 1 :(得分:0)

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

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

显示这个想法的片段:

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

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

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