.NET类允许快速搜索

时间:2012-03-29 14:39:22

标签: .net performance hash dictionary

我正在寻找合适的.NET类,它允许我存储大量自定义记录,然后查找记录实例。 更具体地说,记录类有3个属性,我将使用其中一个来查找实例。要存储的实例数量最多为100.000。

我知道HastSetOf(MyRecord>与自定义IEqualityComarer一起使用。问题是在查找操作中我只知道其中一个记录的道具,实际上需要其他2个道具值。

我是否需要DictionaryOf(字符串,记录)还是更快的?

提前谢谢!

2 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分:0)

一种简单(可能不是最有效的内存)方式是将记录存储在3个单独的哈希表(Dictionary)中(每个属性配对一个)并根据属性查找记录问题

另一种方法可能是使用3元组作为地图的关键字(填充了相关的三个属性)并使用自定义比较器,该比较器仅考虑3元组中的适当元素,基于给出的属性查找

如果您可以在三个属性之间和之内进行排序(例如词法排序),您可以使用它来将记录存储在有序映射中,并执行二进制搜索(这将比线性更有效)查询所有元素以找到您要查找的元素)

编辑:在评论指出后,添加了特定的类名称以澄清