如何检查 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]
应该工作。
详情见:
- Equality 马特汤普森。
- Implementing Equality and Hashing 迈克·阿什
如果你这样做:
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];
}
我收到一个对象人物的数据,每组 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]
应该工作。
详情见:
- Equality 马特汤普森。
- Implementing Equality and Hashing 迈克·阿什
如果你这样做:
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];
}