ios - 在添加新值之前如何检查数组是否具有相同的对象值

标签 ios objective-c nsmutablearray

我正在从词典获取数据。它运行良好并将数据存储在 NSMutableArray 中,我希望在将对象添加到之前需要确保数组不包含具有相同名称和类型的相同对象。请参阅下文。

在插入对象之前,我们应该检查它是否不包含具有类型和名称的对象,如果包含则无需插入。

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."])
// ...

关于ios - 在添加新值之前如何检查数组是否具有相同的对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44524144/

相关文章:

ios - Xcode7/iOS9 : Unit Tests: iPhone Developer: ambiguous (matches "iPhone Developer: Max M. (Team A ID) and "iPhone Developer: Max M.(团队 B ID))

objective-c - 从 iOS 设备上传图片到服务器

objective-c - 在 OS X 上利用单独应用程序的资源

ios - 如何以相同的方式更改 NSMutablearray 的顺序另一个可变数组被更改

ios - 保存和加载 NSMutableArray - NSUserDefaults

ios - 使用 deleteRows 后,becomeFirstResponer() 不会将焦点放在 textField

ios - Eureka 表格 : How to change form global tint colour

iphone - 声明委托(delegate)协议(protocol)

objective-c - 有什么方法可以指定 NSMutableArray 的对象类吗?

javascript - Sinch - 无法建立从 Web (javascript) 到移动应用程序 (android/iOS) 的调用