比较包含NSString的NSDictionaries
我有两个包含NSStrings
NSDictionaries
。 为了比较这两个字典我使用isEqualToDictionary:
方法。 关于isEqualToDictionary:
的文档说:
“如果两个字典每个都拥有相同数量的条目,并且对于给定的键,每个字典中相应的值对象满足isEqual:test,则两个字典具有相同的内容。
所以,我的string通过isEqual:
方法进行比较。
问题是:
isEqual:
如何工作的NSString
?
它使用isEqual:
来自NSObject
吗? 我读过NSObject
isEqual
只是比较地址,使用==
。 为了certificate或反驳这个想法,我写了一个例子:
NSString *str1 = @"sampleString"; NSString *str2 = [NSString stringWithFormat:@"%@", @"sampleString"]; BOOL result = [str1 isEqual:str2];
result
是YES
, str1
和str2
的地址虽然不同。
所以,要么不使用isEqual:
从NSObject
(比什么?),或NSObject
的isEqual:
做一些更复杂的事情,然后只是检查地址的相等性。
有人知道它是如何工作的吗?
NSString
重载isEqual:
为了正确地比较string,所以你用这种方式比较字典是完全没问题的。
isEqualToDictionary将每个对象与isEqual进行比较。
在我的情况下,它不适用于我的字典中的NSString对象。 所以我做了一个非常简单的解决方法。 我比较两个词典的描述。 这适用于包含NSString和NSNumber的字典,以及包含描述方法的所有对象。
[[myDict1 description] isEqualToString:[myDict2 description]]
比较字典的文字描述 。 我在unit testing中使用它。
NSString *a = dictionary.description; NSString *b = assertation.description; BOOL test = [a isEqualToString:b];