检查字典数组中是否存在字典?

时间:2011-07-14 07:51:49

标签: iphone objective-c

我有一个字典数组,其中包含相同的键但值不同。 我有另一个字典,我想检查该字典是否存在于该数组中...... ???

2 个答案:

答案 0 :(得分:1)

假设你的sesond字典key1,key2,key3中有三个键,以便在你的数组中验证字典的存在使用'NSPredicate`类这样 假设您的数组是_myDicArray而其他字典是_refDic

NSPredicate* myPredicate =[NSPredicate predicateWithFormat:@"key1 like %@ AND key2 like %@ AND key3 like %@",[_refDic objectForKey:@"key1"],[_refDic objectForKey:@"key2"],[_refDic objectForKey:@"key3"]];
NSArray* someOtherArr = [[_myDicArray filteredArrayUsingPredicate:filmPredicate] objectAtIndex:0];
if([someOtherArr count] > 0)
    //this is what you wanted ... this array has ur dic

我认为这也应该有用

 NSPredicate* myPredicate =[NSPredicate predicateWithFormat:@"self == %@",_refDic];
NSArray* someOtherArr = [[_myDicArray filteredArrayUsingPredicate:filmPredicate] objectAtIndex:0];
if([someOtherArr count] > 0)
    //this is what you wanted ... this array has ur dic

答案 1 :(得分:1)

好吧,我会这样实现它。

创建NSDictionary的子类并实现这些方法:

- (BOOL)isEqual:(id)object;
- (NSUInteger)hash;

正确实现哈希非常重要。它应该为不同的字典返回不同的值,即使它们根据您的定义相等。在isEqual中,您可以检查两个字典是否包含相同的键和相同的值。如果是,则返回YES,否则返回NO。

有了这个,您的支票后面只有一行:[arrayOfDictionaries containsObject:dictionaryIAmLookingFor];

如果实现不正确的哈希或跳过实现它,containsObject将不会对数组中的所有对象执行isEqual。