2011-09-13 45 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)比這慢。 –