我正在寻找合适的.NET类,它允许我存储大量自定义记录,然后查找记录实例。 更具体地说,记录类有3个属性,我将使用其中一个来查找实例。要存储的实例数量最多为100.000。
我知道HastSetOf(MyRecord>与自定义IEqualityComarer一起使用。问题是在查找操作中我只知道其中一个记录的道具,实际上需要其他2个道具值。
我是否需要DictionaryOf(字符串,记录)还是更快的?
提前谢谢!
答案 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元组中的适当元素,基于给出的属性查找
如果您可以在三个属性之间和之内进行排序(例如词法排序),您可以使用它来将记录存储在有序映射中,并执行二进制搜索(这将比线性更有效)查询所有元素以找到您要查找的元素)
编辑:在评论指出后,添加了特定的类名称以澄清