2011-09-13 47 views
4

从集合中获取对象的速度更快?NSDictionary VS NSArray + NSPredicate:更快/推荐

a。在一个NSDictionary中搜索与[dictionary objectForKey:key];

b。在NSArray中搜索[NSPredicate predicateWithFormat:@"someKey like %@",someKeyValue];

在这两种情况下,我都创建了集合。

问候!

回答

4

假设编程良好的字典,这将会快得多。一本好的词典应该在恒定的时间O(1)使用散列图来找到你的密钥。如果对数组进行排序,知道并使用二进制搜索,则可以优化O(log n)处的二进制搜索,否则它将不得不线性查看每个对象,即O(n)操作。如果你能以某种方式将密钥转化为直接索引,最好是一次排序。

+2

一个好的字典会在O(1)中找到你的密钥。散列表有恒定的时间查找。 –

+0

“好”是一个非常灵活的词。基于散列的和基于树的字典在不同情况下都具有吸引力。 NS/CFDictionary通常是一个基于哈希的结构,但保留正确的(请参阅CFDictionary.h)比这慢。 –