如何检查 NSDictionary 中的值是不是存在于字典数组中
Posted
技术标签:
【中文标题】如何检查 NSDictionary 中的值是不是存在于字典数组中【英文标题】:How to check if the value in an NSDictionary exists in an array of dictionarys如何检查 NSDictionary 中的值是否存在于字典数组中 【发布时间】:2010-09-14 14:55:26 【问题描述】:标题有点混乱……我来解释一下
我有一个NSMutableArray
我正在填充NSMutableDictionary
对象。我要做的是在将字典对象添加到数组之前,我需要检查是否有任何字典包含等于已设置的 id 的值。
例子:
第 1 步:单击按钮设置对象的 id 以用于建立视图。
第 2 步:在所述视图中按下另一个按钮以将其部分内容保存到字典中,然后将所述字典添加到数组中。但如果已建立的 ID 已作为其中一个字典键的值存在,则不要插入此字典。
这是我目前无法使用的一些代码:
-(IBAction)addToFavorites:(id)sender
NSMutableDictionary *fav = [[NSMutableDictionary alloc] init];
[fav setObject:[NSNumber numberWithInt:anObject.anId] forKey:@"id"];
[fav setObject:@"w" forKey:@"cat"];
if ([dataManager.anArray count]==0) //Nothing exists, so just add it
[dataManager.anArray addObject:fav];
else
for (int i=0; i<[dataManager.anArray count]; i++)
if (![[[dataManager.anArray objectAtIndex:i] objectForKey:@"id"] isEqualToNumber:[NSNumber numberWithInt:anObject.anId]])
[dataManager.anArray addObject:fav];
[fav release];
【问题讨论】:
您希望代码在哪个版本的 ios 上运行?如果您使用的是 iOS 4.0+,那么块可以让这非常容易。 不需要特殊的“空”案例。而且您在循环中的逻辑是错误的。您首先需要检查它是否在其中 any 中,并在循环之后,如果需要,添加。 这实际上是在 iPad,iOS 3.2 上运行的。 【参考方案1】:进行这种检查的一种相当简单的方法是使用 NSPredicate 过滤数组。如果没有匹配,过滤的结果将是一个空数组。比如:
NSArray *objs = [dataManager anArray];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id == %@", [NSNumber numberWithInt:i]];
NSArray *matchingObjs = [objs filteredArrayUsingPredicate:predicate];
if ([matchingObjs count] == 0)
NSLog(@"No match");
【讨论】:
以上是关于如何检查 NSDictionary 中的值是不是存在于字典数组中的主要内容,如果未能解决你的问题,请参考以下文章