NSArray vs NSDictionary - 哪个更适合字符串搜索

时间:2014-05-03 20:33:17

标签: ios objective-c search nsarray nsdictionary

我将在plist中存储值列表并检索它们。每次调用搜索方法时,将搜索列表中的值(每次都可以更改)。列表中可能会有大约10个值。

NSArray或NSDictionary是否更适合搜索?

我认为NSArray更合适,因为现在,至少,我没有键值对数据集,只是一个列表。

有人可以确认并提供搜索阵列的最佳方法吗?

由于

3 个答案:

答案 0 :(得分:0)

字典搜索比数组更快,因为键是经过哈希处理的。使用数组,系统必须检查所有项目,直到找到匹配项。

NSSet的文档说,集合在测试成员资格方面要比数组更快。如果没有为每个键存储的值,最好的选择可能是将数据作为数组存储到plist中。在运行时,读取数组,并使用NSSet类方法setWithArray:

将其内容加载到集合中

如果您的数据集很大(数千个项目),我建议使用字典进行性能测试,其中所有值都是针对NSSet的NSNull。 (使用您使用objectForKey:的字典,使用containsObject:方法设置

答案 1 :(得分:0)

忽略计时最好的选择是使用NSArray。 NSArray有各种有用的方法,如

(NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate

(NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate

可用于在数组中进行搜索。

答案 2 :(得分:0)

问题是概念性的:

如果您有值列表,则不得使用NSDictionary 。相应的数据结构NSArrayNSSet

基本上,NSSetNSArray 更快,因为不必考虑订单等。

因此,如果您只需搜索值顺序无关紧要要使用的最佳数据结构为{{ 1}}(或NSSet如果你需要它可变的话。)