比较包含NSStrings的NSDictionaries

时间:2013-07-19 23:45:50

标签: ios objective-c macos cocoa foundation

我有两个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];

resultYESstr1str2的地址不同。
因此,要么它不使用isEqual:中的NSObject(比什么?),要么NSObject isEqual:执行更复杂的事情,只需检查等式地址。

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

3 个答案:

答案 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];