我可以通过两种方式测试NSDictionary中是否存在密钥:

BOOL containsKey = [[dictionary allKeys] containsObject:foo];

BOOL containsKey = ([dictionary objectForKey:foo] != nil);

哪种方法更快,为什么?

最佳答案

通常,哈希查找比遍历所有字典键,从它们创建数组(内存分配相对昂贵)然后搜索数组(由于数组未排序,甚至不能是二进制搜索)要快。 。

不过,出于科学的考虑,我制作了两个可执行文件,它们分别对每种样式执行一百万次并对它们计时。

使用allKeys:

real    0m4.185s
user    0m3.890s
sys     0m0.252s

使用objectForKey:
real    0m0.396s
user    0m0.189s
sys     0m0.029s

显然,各种因素都可能影响这一点—字典的大小,缓存allKeys返回值等。但是,我不希望出现数组搜索比字典查找更快的情况。

关于cocoa - 哪种检查NSDictionary是否包含特定 key 的方法更快?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/831528/

10-10 05:47