ios如何比较nsmutablearray中的nsdictionary

时间:2013-06-27 21:34:24

标签: iphone ios ipad nsmutablearray nsmutabledictionary

我必须有2 NSMutableArray个包含NSMutableDictionary的内容。我需要验证其中一个数组中的字典是否存在于另一个数组中。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

我不确定这是否是最好的方法,但它很容易。我创建了一种方法来验证NSDictionary中是否存在NSArray。在此函数中,我将NSDictionary s转换为NSString并进行比较。

- (BOOL)verifyIfDictionary:(NSDictionary *)dict existsInsideArray:(NSArray *)array
{
    BOOL result = NO;
    NSString *dictStr = [NSString stringWithFormat:@"%@",dict]; // convert dictionary to string
    for (NSDictionary *d in arrayOfDictionaries)
    {
        NSString *dStr = [NSString stringWithFormat:@"%@",dict]; // same conversion as above conversion
        // now, I just have to compare the resulting strings
        if ([dictStr isEqualToString:dStr])
            result = YES;
    }

    return result;
}

现在你只需要遍历一个NSArray并使用这个方法,就像这样:

NSArray *arrayOfDictionaries1;
NSArray *arrayOfDictionaries2;

// initialize them, fill with data, do your processing.. etc, etc...

// then, when you want to verify:
for (NSDictionary *dict in arrayOfDictionaries1)
{
    if ([self verifyIfDictionary:dict existsInsideArray:arrayOfDictionaries2])
    {
        NSLog(@"exists!");
    }
}

答案 1 :(得分:0)

要检查array1是否包含array2中的所有项目:

NSMutableArray *mutableArrayToCheck = [array2 mutableCopy];
[mutableArrayToCheck removeObjectsInArray:array1];

if (array2.count > 0 && mutableArrayToCheck.count == 0) {
    // array2 contains all the items in array1
}

忽略数组内容的类型一秒,只考虑数字。我们有2个阵列:

array1 = [ 1, 2, 3 ]
array2 = [ 1, 3 ]

如果我们从array2中删除array1中的项目,结果是一个空数组,那么我们就知道array2中的所有项目也都在array1中。

removeObjectsInArray:通过搜索数组并比较每个项目来为我们做到这一点。我们只需要查看结果。

无论数组的内容是什么,只要它们实现hashisEqual:,这都有效。