【问题标题】:.NET class allowing fast search.NET 类允许快速搜索
【发布时间】:2012-04-13 05:36:22
【问题描述】:

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

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

我应该需要 DictionaryOf(string, Record) 还是有更快的?

提前谢谢你!

【问题讨论】:

    标签: .net performance hash dictionary


    【解决方案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());
    }
    

    【讨论】:

      【解决方案2】:

      一种简单(并且可能不是内存效率最高)的方法是将记录存储在 3 个单独的哈希表 (Dictionary) 中(每个属性配对一个)并根据相关属性查找记录

      另一种方法是使用 3 元组作为映射的键(填充有问题的三个属性)并使用自定义比较器,该比较器仅根据给定的属性考虑 3 元组中的适当元素查找

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

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

      【讨论】:

      • 要连接到 .NET:Dictionary 是 .NET 框架的标准哈希表实现。
      猜你喜欢
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 2019-08-10
      • 2015-03-20
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多