2012-03-29 89 views
1

我正在尋找合適的.NET類,允許我存儲大量的自定義記錄,然後查找記錄實例。 更具體地說,記錄類有3個屬性,我會用alwas其中一個尋找一個實例。存儲實例的數量將高達100.000。.NET類允許快速搜索

我知道HastSetOf(MyRecord>自定義使用IEqualityComarer該propblem是,在查找操作我只知道記錄的道具之一,將實際需要的其他2個道具值。

我是否需要一個DictionaryOf(字符串,記錄)或是否有一個更快的

預先感謝您

回答

1

使用Dictionary類在這種情況下,你需要三點字典:?!一個爲每個屬性你」如果這些屬性不是唯一的,那麼您將需要使用Lookup來代替。

var entriesById = entries.ToDictionary(e => e.Id); 
var entriesByCategoryId = entries.ToLookup(e => e.CategoryId); 

Console.WriteLine(entriesById[42].ToString()); 
foreach(var entry in entriesByCategoryId[13]) 
{ 
    Console.WriteLine(entry.ToString()); 
} 
0

一個簡單的(也可能不是最高效存儲)方式是基於有關財產存放在3個獨立的哈希表(Dictionary)(每個屬性配對)的記錄和查找記錄了

另一種方式可能是使用三元組作爲地圖的關鍵字(使用三個屬性填充),並使用自定義比較器,該自定義比較器只根據給定的主觀性考慮三元組中的適當元素查找

如果您可以想出三個屬性之間的排序(例如詞彙排序),你可以用它來存儲記錄在一個有序的地圖,並執行二進制搜索(這將比所有元素的線性查詢更有效率,以找到你正在尋找的那個)

編輯:在評論指出後添加特定的類名稱以進行澄清

+0

爲了與.NET建立連接:Dictionary是.NET框架的標準哈希表實現。 – StriplingWarrior 2012-03-29 14:49:24