如何检查 NSMutableArray 中重复的 NSObjects

How to check the duplicate NSObjects in NSMutableArray

我收到一个对象人物的数据,每组 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 回复,我正在将属性添加到数组中。在我以前只得到一个 属性 之前,在那种情况下,我做了以下操作来消除重复项:

[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 class将属性绑定在一起并将一个person添加到数组中。

[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];

            }

        }];

您需要为 DataObject class 实施 isEqual。然后 [personArray containsObject:data] 应该工作。

详情见:

如果你这样做:

DataObject *data = [DataObject new];

您刚刚创建了 data 的新实例。 personArray 中没有其他对象可以等于该新实例。

我假设您实际上是在尝试检查是否有 data 对象包含与 personArray 中其他 data 对象相同的属性。有多种方法可以做到这一点(我喜欢 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];
}