2010-11-18 68 views
1

我有一個在vb.NET中的對象集合。每個對象都有兩個不同的ID,我們稱它們爲ID1和ID2。創建一個雙鍵集合

我需要能夠基於這些ID之一快速找到集合中的特定對象。在某些情況下,我有ID1,而在其他情況下,我有ID2。我目前正在使用以ID1爲關鍵字的Collection數據結構,但是當我需要使用ID2查找對象時,這並沒有幫助。

是否有更好的數據結構使用?

感謝

回答

1

如果你真的需要快速數據訪問,您將無法使用數據結構,一個映射ID1得到解決 - > yourObject和另外一個映射ID2 - > yourObject。我推薦使用通用的Dictionary(Of TKey, TValue)類,而不是(有點過時的)Collection類,它主要是VB6兼容性的東西。如果您採用雙數據結構方法,則必須手動保持它們的同步。 (您可能需要創建一個單獨的類TwoKeyDictionary此,所有的同步邏輯集中。)

在另一方面,如果性能是一個問題,你可以使用任意的數據結構(甚至列表或一組),並使用LINQ輕鬆訪問:

Dim lst As List<MyClass> = ... 
Dim myObject = (From entry In lst Where entry.ID1 = ...).FirstOrDefault() 

當然,你可以使用相結合的辦法,如果快速訪問只需要要麼ID1或ID2。然後,您可以根據ID1製作一本詞典,並使用LINQ通過ID2搜索該詞典。