2012-03-29 38 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