我正在尝试搜索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
是否不在字典中。
请建议我如何克服我的问题。
答案 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;
我不知道性能如何叠加,所以如果您的数据集很大,您可能需要检查执行时间是否在您的限制之内。