8

我有两个NSDictionaries包含NSStrings. 为了比较这两个字典,我使用isEqualToDictionary:方法。上的文档isEqualToDictionary:

“如果两个字典都包含相同数量的条目,则两个字典具有相同的内容,并且对于给定的键,每个字典中的相应值对象满足 isEqual: 测试。”

所以,我的字符串是按isEqual:方法比较的。

问题是:
如何isEqual:工作NSString

它使用isEqual:fromNSObject吗?我已经isEqualNSObject仅比较地址中使用==. 为了证明或反驳这个想法,我写了一个示例:

NSString *str1 = @"sampleString";
NSString *str2 = [NSString stringWithFormat:@"%@", @"sampleString"];
BOOL result = [str1 isEqual:str2];

虽然resultis YES、 和 的地址str1不同str2
所以,要么它不使用isEqual:from NSObject(比什么?),要么NSObject'sisEqual:做了一些比只检查地址相等性更复杂的事情。

有人知道它是如何工作的吗?

4

3 回答 3

10

NSString覆盖isEqual:以正确比较字符串,因此您可以通过这种方式比较字典。

于 2013-07-19T23:47:48.333 回答
5

isEqualToDictionary 将每个对象与 isEqual 进行比较。

在我的情况下,它不适用于我字典中的 NSString 对象。所以我做了一个非常简单的解决方法。我比较了两本词典的描述。这适用于包含 NSString 和 NSNumber 的字典以及包含描述方法的所有对象。

[[myDict1 description] isEqualToString:[myDict2 description]]
于 2014-03-18T10:15:22.297 回答
1

比较字典的文字描述。我在单元测试中使用它。

NSString *a = dictionary.description;
NSString *b = assertation.description;
BOOL test = [a isEqualToString:b];
于 2014-05-04T20:21:44.540 回答