我正在尋找合適的.NET類,允許我存儲大量的自定義記錄,然後查找記錄實例。 更具體地說,記錄類有3個屬性,我會用alwas其中一個尋找一個實例。存儲實例的數量將高達100.000。.NET類允許快速搜索
我知道HastSetOf(MyRecord>自定義使用IEqualityComarer該propblem是,在查找操作我只知道記錄的道具之一,將實際需要的其他2個道具值。
我是否需要一個DictionaryOf(字符串,記錄)或是否有一個更快的
預先感謝您
我正在尋找合適的.NET類,允許我存儲大量的自定義記錄,然後查找記錄實例。 更具體地說,記錄類有3個屬性,我會用alwas其中一個尋找一個實例。存儲實例的數量將高達100.000。.NET類允許快速搜索
我知道HastSetOf(MyRecord>自定義使用IEqualityComarer該propblem是,在查找操作我只知道記錄的道具之一,將實際需要的其他2個道具值。
我是否需要一個DictionaryOf(字符串,記錄)或是否有一個更快的
預先感謝您
使用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());
}
一個簡單的(也可能不是最高效存儲)方式是基於有關財產存放在3個獨立的哈希表(Dictionary
)(每個屬性配對)的記錄和查找記錄了
另一種方式可能是使用三元組作爲地圖的關鍵字(使用三個屬性填充),並使用自定義比較器,該自定義比較器只根據給定的主觀性考慮三元組中的適當元素查找
如果您可以想出三個屬性之間的排序(例如詞彙排序),你可以用它來存儲記錄在一個有序的地圖,並執行二進制搜索(這將比所有元素的線性查詢更有效率,以找到你正在尋找的那個)
編輯:在評論指出後添加特定的類名稱以進行澄清
爲了與.NET建立連接:Dictionary是.NET框架的標準哈希表實現。 – StriplingWarrior 2012-03-29 14:49:24