比较包含 NSStrings 的 NSDictionaries
Posted
技术标签:
【中文标题】比较包含 NSStrings 的 NSDictionaries【英文标题】:Compare NSDictionaries containing NSStrings 【发布时间】:2013-07-19 23:45:50 【问题描述】:我有两个包含NSStrings
的NSDictionaries
。为了比较这两个字典,我使用isEqualToDictionary:
方法。 isEqualToDictionary:
says 上的文档
“如果两个字典都包含相同数量的条目,则两个字典具有相同的内容,并且对于给定的键,每个字典中的相应值对象满足 isEqual: 测试。”
所以,我的字符串是通过isEqual:
方法比较的。
问题是:isEqual:
如何为 NSString
工作?
它是否使用来自NSObject
的isEqual:
?
我读过isEqual
来自NSObject
只是比较地址,使用==
。
为了证明或反驳这个想法,我写了一个示例:
NSString *str1 = @"sampleString";
NSString *str2 = [NSString stringWithFormat:@"%@", @"sampleString"];
BOOL result = [str1 isEqual:str2];
result
是YES
,但str1
和str2
的地址不同。
因此,要么它不使用来自NSObject
的isEqual:
(比什么?),要么NSObject
的isEqual:
做了一些比只检查地址相等性更复杂的事情。
有人知道它是如何工作的吗?
【问题讨论】:
为什么不能使用 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 发布到我的服务器?