比较包含 NSStrings 的 NSDictionaries

Posted

技术标签:

【中文标题】比较包含 NSStrings 的 NSDictionaries【英文标题】:Compare NSDictionaries containing NSStrings 【发布时间】:2013-07-19 23:45:50 【问题描述】:

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

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

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

问题是:isEqual: 如何为 NSString 工作?

它是否使用来自NSObjectisEqual:? 我读过isEqual 来自NSObject 只是比较地址,使用==。 为了证明或反驳这个想法,我写了一个示例:

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

resultYES,但str1str2 的地址不同。 因此,要么它不使用来自NSObjectisEqual:(比什么?),要么NSObjectisEqual: 做了一些比只检查地址相等性更复杂的事情。

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

【问题讨论】:

为什么不能使用 isEqualToString 方法?太容易了? @SamBudda 不是我,是 NSDictionary 使用 isEqual:比较它的元素。 【参考方案1】:

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

【讨论】:

谢谢。有没有办法确保它? NSString 的标题和文档什么也没说。 我找到了,这个事实在《Objective-c Programming: The Big Nerd Ranch Guide》中有提到。 @Anastasia 此外,在isEqualToString: 下的文档中非常间接地提到了它,它说当两者都是字符串时它与isEqual: 相同,但速度更快。【参考方案2】:

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

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

[[myDict1 description] isEqualToString:[myDict2 description]]

【讨论】:

【参考方案3】:

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

NSString *a = dictionary.description;
NSString *b = assertation.description;
BOOL test = [a isEqualToString:b];

【讨论】:

NSDictionary 我认为没有排序。

以上是关于比较包含 NSStrings 的 NSDictionaries的主要内容,如果未能解决你的问题,请参考以下文章

将 NSStrings 转换为 C 字符并从 Objective-C 调用 C 函数

我可以在 iphone 目标 c 的警报中使用 NSStrings 吗?

如何将原始 NSData 以及一些 NSStrings 发布到我的服务器?

IOS/Objective-C:按字符串中的单词数对 NSStrings 的 NSArray 进行排序

如何找到两个 NSStrings 的共同模式?

如何制作一个NSStrings数组? [复制]