【问题标题】:List of Dictionaries (Search optimization, C#)字典列表(搜索优化,C#)
【发布时间】:2012-01-23 16:13:50
【问题描述】:

我有一个字典列表,List<Dictionary<String,Object>>。键是一些抽象记录的标识符。这些词典来自不同的地方。每个 Dictionary 的大小在 [0, 1000] 范围内。

所有字典都包含唯一键。在积累了一些词典后,我必须按键进行搜索。它可以通过迭代列表并在每个字典上调用搜索方法来完成,也可以通过将所有字典复制到一个中来完成。这些方法不能提供非常好的性能。我对优化此任务的方法很感兴趣。

编辑: 感谢你们!也许我会改变累积方法,结果问题本身就解决了!

【问题讨论】:

  • 您不会绕过迭代List 并查询每个Dictionary。如果您在Add 到每个Dictionary 期间保留键的数据结构,则可以进行优化。也许是时候考虑一​​种不同的存储方法了?
  • 将它们分开存放字典的原因是什么?
  • @weston 因为单独的搜索;)
  • 好的,所以有时您想限制到特定的字典,而其他时候您想搜索全部?如果是这样,为什么不搜索所有(我的意思是一个包含所有字典的字典),然后过滤结果。而不是过滤结果(通过使用单独的字典)然后按当前搜索。

标签: c# search optimization dictionary


【解决方案1】:

您是否预计在初始填充阶段之后会有大量的密钥提取?如果是这样,请将所有内容合并到一个字典中。如果您只进行 少数 次提取,我看不出有什么比查询每本字典更好的方法。

当然,您可以创建一种混合方法:为合并后的结果创建一个新的(最初为空的)字典,并在您被要求输入键时填充它 - 每次要求您输入键时搜索所有其余部分尚未在您的“大”字典中的键。

有没有办法预测哪个字典会有一个特定的键?

【讨论】:

    【解决方案2】:

    如果任何方法可以通过指定key 来本地化感兴趣的字典,您自然可以尝试创建一个交叉关联表,您可以尝试将keydictionary 匹配。

    如果不是,恕我直言,没有看到任何其他选项只是遍历集合并要求 key ,可能正在使用标准 fornot 更好的 linq 编码。

    【讨论】:

      【解决方案3】:

      除了 Jon 所说的之外,还有一个称为 PowerCollections 的 API,其中包含 MultiDictionary。如果我的记忆没有损坏,我相信你可以将它用于上述目的。

      http://powercollections.codeplex.com/discussions/242163

      【讨论】:

        【解决方案4】:

        听起来您有很多字典可以“加速”(假设动机)搜索,这些搜索仅限于某些“抽象记录”类型。

        您可以只使用一本字典,但在有限的搜索中检查结果是否为必需的抽象记录类型。而不是像目前那样为每个抽象记录类型维护一个字典。

        【讨论】:

          猜你喜欢
          • 2021-11-09
          • 2018-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-29
          • 1970-01-01
          相关资源
          最近更新 更多