如何在添加新值之前检查数组是否具有相同的对象值
问题描述:
我正在从Dictionary获取数据。它运作良好,并将数据存储在NSMutableArray中我希望在将对象添加到需要之前确保Array不包含具有相同名称和类型的同一对象。请看下面。如何在添加新值之前检查数组是否具有相同的对象值
在插入对象之前,如果不需要插入,我们应该检查它是否包含Type和Name对象。
NSArray *resultDic = [result1 objectForKey:@"results"];
for (int i = 0; i<[resultDic count]; i++) {
id item = [resultDic objectAtIndex:i];
NSDictionary *jsonDict = (NSDictionary *) item;
GetData *theObject =[[GetData alloc] init];
NSString*error = [jsonDict valueForKey:@"error"];
if(![error isEqualToString:@"No Record Found."])
{
[theObject setVaccineID:[jsonDict valueForKey:@"ID"]];
[theObject setVaccineName:[jsonDict valueForKey:@"Name"]];
[theObject setVaccinationType:[jsonDict valueForKey:@"Type"]];
[theObject setVaccineType:[jsonDict valueForKey:@"VType"]];
[theObject setFarmName:[jsonDict valueForKey:@"FName"]];
[theObject setDay:[jsonDict valueForKey:@"Day"]];
[theObject setAddedDateTime:[jsonDict valueForKey:@"DateTime"]];
[appDelegate.dataArray addObject:theObject];
}
}
答
一个通用的解决方案是教你的GetData
对象如何比较自己和他人。如果可以比较它们,那么可以很容易地确定匹配是否在任何集合中(并且您可能还想在其他上下文中进行比较)。通过执行isEqual:
来完成此操作。这可能是这个样子:
// in GetData.m
- (BOOL)isEqual:(id)object {
if ([object isKindOfClass:[GetData self]]) {
// assuming that the object is fully characterized by it's ID
return [self.vaccineId isEqual:((GetData *)object).vaccineId];
}
else {
return NO;
}
}
// have the hash value operate on the same characteristics as isEqual
- (NSUInteger)hash {
return [self.vaccineId hash];
}
做完这些后,你可以利用NSArray的containsObject:
的。类似
// ...
if(![appDelegate.dataArray containsObject:theObject] && ![error isEqualToString:@"No Record Found."])
// ...
答案>> https://stackoverflow.com/questions/10387582/checking-an-array-if-it-contains-an-object-by-a-specific-property-objective-c –
您可以通过使用containsObject.Check进行检查,下面的链接可能对您有用https://stackoverflow.com/a/6299064/5184217 –