我可以通过两种方式测试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/