isEqualToArray或isEqualToDictionary可以比较多深?

she*_*tal 1 cocoa-touch nsdictionary nsarray ios

哦,所以我在这里有很多情况。

案例:1一个NSArray字典,其键的类型为NSString,值的类型也为NSString。isEqualToArray返回false

case:2一个字典的NSArray,其键类型为NSString,某些模型对象的值类型具有name,address,DOB之类的属性。因此,如果我在模型对象(如名称)中更改一个值,并使用相同的键插入字典中。并将数组与旧数组进行比较仍然可以。isEqualToArray返回false

现在这可以继续进行下去。如果我的模型对象中有一个NSArray又是某个模型的原始类型,该怎么办?isEqualToArray是否会比较对象值中的几乎所有内容(如深度序列化比较),还是必须停在某个地方?

gna*_*729 6

比较数组时,NSArray isEqual:方法首先检查两个数组具有相同数量的元素(否则,它们显然不相同),然后依次遍历所有元素,然后依次使用isEqual:方法。因此,如果您的数组包含其他数组,字典或其他对象,则按照刚才的描述再次对数组进行比较,字典将按照我的描述进行比较,其他对象通过发送isEqual进行比较。

比较字典时,NSDictionary isEqual:方法首先检查两个字典具有相同数量的键/值对。然后,它将使用第一个字典的第一个键,并且该键必须存在于第二个字典中,并且对象必须相同。然后第二个键,第三个键,依此类推。


rma*_*ddy 5

只要所涉及的每个类都有正确的isEqual:方法实现,这一切都有效。真的没有关系isEqualToArray:。所做的只是调用isEqual:两个数组中的每个对象。所以它取决于那些具有有效isEqual:方法(和hash方法)的对象。

只要你的模型对象的isEqual:方法正确地比较了它的每个属性,你就会得到预期的结果。