gpt4 book ai didi

ios - 如何在不知道索引的情况下检查对象是否存在于NSMutableArray中,并在iOS中将其替换(如果存在)?

转载 作者:行者123 更新时间:2023-12-01 17:33:04 28 4
gpt4 key购买 nike

我有一个包含类型为Person的对象的NSMutableArray。 Person对象包含NSString * name,NSString * dateStamp和NSString * testScore的参数。我想使用快速枚举进行的操作是检查NSMutableArray * testResults中的内容,以查看是否存在具有相同名称参数的对象。

如果是这样,那么我想将NSMutableArray中的现有对象替换为我将要插入的对象,该对象将具有最新的dateStamp和testScore值。如果找到没有匹配名称参数的对象,则只需插入我拥有的对象。

到目前为止,我的代码如下所示:

这是创建我要插入的对象的代码:

Person *newPerson = [[Person alloc] init];
[newPerson setPersonName:newName]; //variables newName, pass, and newDate have already been
[newPerson setScore:pass]; //created and initialized
[newPerson setDateStamp:newDate];

这是我尝试遍历NSMutableArray的代码,以查看是否存在具有相同name参数的对象:
for (Person *checkPerson in personList) { //personList is of type NSMutableArray

if (newPerson.newName == checkPerson.name) {

//here is where I need to insert the code that replaces checkPerson with newPerson after a match has been found


}

else {

personList.addObject(newPerson); //this is the code that adds the new object to the NSMutableArray when no match was found.
}

}

这不是一个非常复杂的问题,但是对于如何找到匹配项,然后替换实际的对象却不事先知道对象所处的索引,我感到困惑。

最佳答案

您要使用indexOfObjectPassingTest查找匹配项:

    NSInteger indx = [personList indexOfObjectPassingTest:^BOOL(Person *obj, NSUInteger idx, BOOL *stop) {
return [obj.name isEqualToString:newPerson.name];
}];
if (indx != NSNotFound) {
[personList replaceObjectAtIndex:indx withObject:newPerson];
}else{
[personList addObject:newPerson];
}

注意,我使用isEqualToString:比较两个字符串,而不是==。在该论坛上,该错误已被提出并回答了一百万次。

您的命名有些不一致。在问题中,您说Person对象具有name属性,但是当您创建一个新的person时,您将使用setPersonName,这意味着该属性名称为personName。我想,只要在​​答案中说出名字即可。

关于ios - 如何在不知道索引的情况下检查对象是否存在于NSMutableArray中,并在iOS中将其替换(如果存在)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13908754/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com