Objective c 检查对象数组中是否存在不循环的对象
我想检查NSMutableArray是否包含自定义对象。但如果我理解正确的contains函数,它会在数组中搜索相同的对象(放置在相同的内存点上) 我知道objectArray与objToCheck相比具有相同的对象和相同的变量值,但这样的if总是返回false。有没有一种方法可以在不编写自定义循环和通过参数比较对象的情况下检查此问题?重写自定义对象的方法(实际上它是Objective c 检查对象数组中是否存在不循环的对象,objective-c,nsmutablearray,Objective C,Nsmutablearray,我想检查NSMutableArray是否包含自定义对象。但如果我理解正确的contains函数,它会在数组中搜索相同的对象(放置在相同的内存点上) 我知道objectArray与objToCheck相比具有相同的对象和相同的变量值,但这样的if总是返回false。有没有一种方法可以在不编写自定义循环和通过参数比较对象的情况下检查此问题?重写自定义对象的方法(实际上它是NSObject协议的一部分),并检查对您有意义的任何实例变量,以确保对象被视为相等 一篇关于此主题的文章。覆盖自定义对象的方法(
NSObject
协议的一部分),并检查对您有意义的任何实例变量,以确保对象被视为相等
一篇关于此主题的文章。覆盖自定义对象的方法(实际上它是NSObject
协议的一部分),并检查对您有意义的任何实例变量,以使对象被视为相等
关于此主题的Apple Cocoa Competency文章。您可以尝试从阵列中创建一个临时NSSet,并测试其成员资格 您可以尝试从阵列中创建一个临时NSSet,并测试其成员资格 。。。而且,像往常一样,不要忘记相应地重写
hash
。默认值不只是使用对象id吗?@uchuugaka是的,默认实现使用对象指针来比较是否相等;但是OP希望使用对象本身的属性来测试相等性,这就是-isEqual:
的作用。顺便说一句,这不是对象的“id”。我读到的是“有没有一种方法可以在不检查对象参数的情况下执行此操作”,这对我来说意味着一些不同的东西。重写isEqual:确实有效,但也可能是一种非常有限的情况。其他情况可能需要通过其他方式进行比较。如果这是唯一的用例,那么特殊的外壳就可以了。。。。而且,像往常一样,不要忘记相应地重写hash
。默认值不只是使用对象id吗?@uchuugaka是的,默认实现使用对象指针来比较是否相等;但是OP希望使用对象本身的属性来测试相等性,这就是-isEqual:
的作用。顺便说一句,这不是对象的“id”。我读到的是“有没有一种方法可以在不检查对象参数的情况下执行此操作”,这对我来说意味着一些不同的东西。重写isEqual:确实有效,但也可能是一种非常有限的情况。其他情况可能需要通过其他方式进行比较。如果这是唯一的用例,特殊大小写就可以了。您是要查找特定的对象实例还是类成员的对象?根据您的尝试,NSSet可能更有用。我要查找特定的对象,列表中的所有对象都是同一个类,所以,我想找到具有相同变量值的对象,您可以使用临时NSSet查看。此类用于快速测试集合成员资格。使用setWithArray,您可以非常轻松地创建一个对象:您是在尝试查找特定的对象实例还是类成员对象?根据您尝试执行的操作,NSSet可能更有用。我正在尝试查找特定对象,列表中的所有对象都是同一个类,所以,我想找到具有相同变量值的对象,您可以使用临时NSSet查看。此类用于快速测试集合成员资格。使用setWithArray可以非常轻松地创建一个:可能是因为NSSet无法帮助比较对象NSArray
的容器对象:
已经可以检查成员资格。在这个问题中,缺少的是比较。NSSet成员资格自动是唯一的对象实例。NSArray可以多次保存同一实例。也许我在这个问题上遗漏了一些角度。可能是因为NSSet不能帮助比较对象NSArray
的容器对象:
已经可以检查成员资格。在这个问题中,缺少的是比较。NSSet成员资格自动是唯一的对象实例。NSArray可以多次保存同一实例。也许我在这个问题上遗漏了一些角度。
if(![objectArray containsObject:objToCheck])
{
[objectArray addObject:objToCheck];
}