我有两个NSDictionaries
包含NSStrings
。为了比较这两个词典,我使用了isEqualToDictionary:
方法。 isEqualToDictionary:
上的文档说
“如果两个词典各自具有相同数量的条目,则两个词典具有相同的内容;对于给定的键,每个词典中的相应值对象满足isEqual:test。”
因此,我的字符串按isEqual:
方法进行比较。
问题是:
isEqual:
如何适用于NSString
?
它是否使用isEqual:
中的NSObject
?
我已经从isEqual
看到NSObject
使用==
比较地址。
为了证明或反驳这个想法,我写了一个样本:
NSString *str1 = @"sampleString";
NSString *str2 = [NSString stringWithFormat:@"%@", @"sampleString"];
BOOL result = [str1 isEqual:str2];
result
为YES
,str1
和str2
的地址不同。
因此,要么它不使用isEqual:
中的NSObject
(比什么?),要么NSObject
isEqual:
执行更复杂的事情,只需检查等式地址。
有人知道它是如何运作的吗?
答案 0 :(得分:10)
NSString
会覆盖isEqual:
以正确比较字符串,因此您可以通过这种方式比较字典。
答案 1 :(得分:5)
isEqualToDictionary将每个对象与isEqual进行比较。
在我的情况下,它不适用于我的字典中的NSString对象。所以我做了一个非常简单的解决方法。我比较两个词典的描述。这适用于包含NSString和NSNumber的字典,以及包含描述方法的所有对象。
[[myDict1 description] isEqualToString:[myDict2 description]]
答案 2 :(得分:1)
比较字典的字面描述。我在单元测试中使用它。
NSString *a = dictionary.description;
NSString *b = assertation.description;
BOOL test = [a isEqualToString:b];