比较两个NSMutableArray

时间:2012-06-06 11:56:30

标签: iphone objective-c ios nsmutablearray

我有一个包含NSMutableDictionary值的NSMutableArray。我必须确定NSMutableArray中是否存在特定的字典值?

的NSMutableArray:

表资料:

{
    {

        categories = 267;
        "category_ids" = 267;
        "created_at" = "2012-04-18 05:32:10";
        "custom_design_from" = "2010-12-03 00:00:00";
    }
    {
        categories = 267;
        "category_ids" = 267;
        "created_at" = "2012-04-18 05:32:10";
        "custom_design_from" = "2010-12-03 00:00:00";
    }
 }

我必须识别一个特定的字典值。

我的代码:

if ( [tableData containsObject:[appDelegate.Product objectAtIndex:i]] ) 
{
     // Return Always false...
}

3 个答案:

答案 0 :(得分:2)

据我所知,containsObject:方法通过向其中的所有实例发送isEqual:消息来检查数组是否包含给定对象。 NSDictionary类有方法isEqualToDictionary:表示comares字典的内容。你可以尝试像这样制作smth

- (BOOL) dictionaryArray:(NSMutableArray*)array containsDictionary:(NSDictionary*)givenDictionary
{
    BOOL result = NO;

    for( NSDictionary* dict in array )
    {
        if( [dict isEqualToDictionary:givenDictionary] )
        {
            result = YES;
        }
    }

    return result;
}

如果您的数组通过调用

包含给定的字典,则此方法应返回
NSDictionary* dict = [appDelegate.Product objectAtIndex:i];
if ( [self dictionaryArray:tableData containsDictionary:dict] )
{
    // do what you need
}

答案 1 :(得分:0)

如果2个词典包含相同的数据但它们不是同一个对象,则可能发生这种情况 例如(NSDictionary

NSDictionary *d1 = [NSDictionary dictionaryWithObject:@"1" forKey:@"1"];
NSDictionary *d2 = [NSDictionary dictionaryWithObject:@"1" forKey:@"1"];
if(d1 == d2)
   //Does note get called

s1具有相同的s2数据 但是对象是不同的 所以正常的平等测试永远不会起作用

这可能是你发生的事情 您可能有2个具有相同数据结构的词典但它们实际上不是同一个对象

您必须通过测试NSDictionary中的实际字符串或ID来详细说明您的词典

答案 2 :(得分:0)

包含identic数据的两个对象通常不相同。一个例子:

NSMutableArray* array1 = [NSMutableArray arrayWithObjects:@"a", nil];
NSMutableArray* array2 = [NSMutableArray arrayWithObjects:@"x", @"y", nil];
NSMutableArray* array3 = array2;

现在,当然,array1是一个与array2不同的对象,而array2和array3是相同的objekt。

1: a
2: x, y
3: x, y

所以,让我们改变其中一个:

[array1 replaceObjectAtIndex:0 withObject:@"x"];
[array1 addObject:@"y"];

现在所有三个数组都有相同的内容,但array1和array2仍然是不同的对象:

1: x, y
2: x, y
3: x, y

让我们做另一个改变:

[array2 addObject:@"z"];

由于array1是与array2不同的对象,因此更改数组2不会影响array1。 但是array2与array3相同(array2和array3只是同一个东西的两个名字):

1: x, y
2: x, y, z
3: x, y, z