如何在NSMutableArray中检查重复的NSObject

时间:2015-07-13 17:49:57

标签: ios objective-c nsstring nsmutablearray nsobject

我以5件套的形式收到对象人的数据。让我们说出姓名,年龄,性别,电子邮件,电话号码。我做了以下操作,将字符串添加到NSobject:

DataObject *data=[DataObject new];
data.name=@"name";
data.age=@"age";
data.email=@"email";
//here i want to check for duplicates
[personArray addObject:data];

但是,我想检查personArray是否有重复的NSObject。

我尝试了这个,但它没有用:

if(![personArray containsObject:data]){
      //add data
}

编辑:实际上,这就是我想要做的事情:

我正在获取JSON repsonse,我将属性添加到数组中。在我以前只获得一个属性之前,在这种情况下,我做了以下操作以消除重复:

[JSON[@"person"] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
       if (![obj[@"email"] isEqual:[NSNull null]] && ![personArray containsObject:obj[@"email"]]  ) {

               [personArray addObject:obj[@"email"]];

        }

    }];

后来我为person获得了5个属性,所以我想的不是将它们全部添加到数组中,而是使用NSObject类将属性绑定在一起并将一个人添加到数组中。

[JSON[@"person"] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
           if (![obj[@"email"] isEqual:[NSNull null]] && ![personArray containsObject:obj[@"email"]]  ) { //how to check for the duplicates here? 

                 DataObject *data=[DataObject new];
                 data.name=@"name";
                 data.age=@"age";
                 data.email=@"email";
                [personArray addObject:data];

            }

        }];

2 个答案:

答案 0 :(得分:1)

您需要为isEqual类实现DataObject。然后[personArray containsObject:data]应该有用。

详见:

答案 1 :(得分:1)

如果你这样做:

DataObject *data = [DataObject new];

您刚刚创建了data的新实例。 personArray内的其他任何对象都不能等于该新实例。

我假设您实际上正在尝试检查data对象是否包含与data中其他personArray对象相同的属性。有很多方法可以做到这一点(我喜欢Zaph的答案,很干净),但为了简单起见......

DataObject *data=[DataObject new];
data.name=@"name";
data.age=@"age";
data.email=@"email";    

BOOL contains = NO;
for (DataObject *object in personArray) {
    if ([object.name isEqualToString:data.name] && [object.age isEqualToString:data.age] && [object.email isEqualToString:data.email]) {
        contains = YES;
        break;
    }
}

if (!contains) {
    [personArray addObject:data];
}