2013-10-28 20 views
1

讀了文檔中關於NSSet它說:謂詞是在NSSet中查找對象的最有效方法嗎?

您可以使用組來替代陣列當一個對象 是否包含在集 元素的順序不是重要的測試和性能考慮。

這正是我需要的,因爲性能對我來說非常重要。

所以我重寫了最終會在NSSet中填充的類中的哈希值。

- (NSUInteger)hash 
{ 
    return [[self recordDate] hash]; 
} 

換句話說,recordDate在我的情況下總是唯一的,我期望在這裏有獨特的哈希值。

根據文檔,似乎我可以在NSSet/NSMutableSet中查找對象的唯一方法是通過謂詞。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recordDate == %@", recordDate]; 
NSSet *objectsWithDesiredWeek = [mySet filteredSetUsingPredicate:predicate]; 

我不確定,如果我不俯視的東西。這是在NSSet中查找對象的最有效方法嗎?有沒有像鍵/值?

+1

如果你想要一個關聯容器,你可以使用'NSDictionary'。說實話,我不相信通過謂詞查找一套物品是有效的。謂詞不僅需要解釋某種「程序」(類似於正則表達式),而且時間複雜度也很可能是O(n)。也就是說,謂詞需要應用於所有對象,直到找到爲止。 – CouchDeveloper

+1

您可能想詢問您的問題,而不是您想象中的零件解決方案。 – Wain

+0

你也可以使用objectsPassingTest:找到你想要的東西。我不知道這是否更有效率。 – rdelmar

回答

0

我想我不明白這個問題。 NSSet具有內置方法containsObject。爲什麼這不符合你的需求?

+0

伊恩鄧肯,我認爲這是解決方案。後來我發現這篇文章幫助我更好地理解它:https://developer.apple.com/library/mac/documentation/cocoa/conceptual/Collections/Collections.html但是我也需要實現'hash'和' isEqual'使'containsObject'有效地工作,所以我明白了。 – Houman

相關問題