【问题标题】:Dictionary with duplicate Key [duplicate]具有重复键的字典 [重复]
【发布时间】:2012-10-22 11:46:08
【问题描述】:

可能重复:
Is there an alternative to Dictionary/SortedList that allows duplicates?

我正在寻找可以有重复键的字典类。

我搜索了一下,发现 LookUp 类可以用来存储重复键,但是它没有默认构造函数,所以我们无法在没有任何其他对象的情况下对其进行初始化。

但是我最初没有任何这样的对象,我可以从中初始化一个 LookUp 对象。

所以,我的问题是,.Net framework 3.5 中是否有任何类,其行为类似于 Dictionary,但允许我拥有像 LookUp 这样的重复键?

【问题讨论】:

  • 请问您为什么想要复制密钥?您可以将数组存储为您的值。
  • @Marc-AndréJutras,是的,我想存储用户操作及其受影响的内容,因此,我可以对这些受影响的对象执行类似合并的操作。我可以一个一个地执行此操作,但它很耗时,所以我只是存储这些,然后一次性执行,因此只有该操作需要时间,而不是全部。
  • Dictionary<K,List<V>>代替Dictinary<K,V>怎么样,类似于查找?
  • @YograjGupta:那为什么是字典呢?字典可以快速搜索键。如果您不打算这样做,那就没有意义了,您可以只使用 List>
  • @LB,我目前的实现是使用Dictionary<NetworkAction, Dictionary<NetworkContent, object>> _actionMapping,但我可以多次执行单个操作。

标签: c# .net-3.5 c#-3.0


【解决方案1】:

您可以创建一个键值对列表。

List<KeyValuePair<string,int>>

【讨论】:

  • 但是从逻辑上讲,它不是字典,它只是对的列表。 (这很可能是他需要/想要的,我只是技术性的。)
  • 但是密钥检索会受到影响。字典旨在快速进行关键研究。
  • 是的,但我不确定您如何拥有允许重复键并保持字典优势的东西。看起来他应该使用带有值列表的字典,以便在复制键时,将第二个值添加到列表中,并在查找键时检索两者。 [编辑:Servy 在他的回答中所说的话,提高了他的回答]
  • True, but I'm not sure how you could have something that allows duplicate keys and keeps the advantages of a dictionary. 你不能(技术上)。正如我在回答中所说,根据定义,这是不可能的。
  • @Servy 没错。我没有马上看到你的答案,但它也是我会选择的。我试图直接回答他的问题,但您提供了更好的解决方案。
【解决方案2】:

根据定义,字典永远不能有多个具有相同值的键。 (如果您查找一个键,您会返回什么?)即使是您所指的查找,也不允许它。你可以做的是让每个键引用多个值(逻辑上,而不是技术上)。这是通过有一个字典来完成的,其中的值是某种数据结构(例如,List),其中包含与该特定键对应的所有值。

【讨论】:

  • 这类似于 Ninject 的 MultiMap
  • 我一直使用Dictionary&lt;int, List&lt;string&gt;&gt;(或类似的)。
  • @khillang 是的,这只是 Dictionary&lt;K, List&lt;V&gt;&gt; 的包装;它实际上并没有为你做那么多,但它做了一点。通常我发现直接使用Dictionary&lt;T, List&lt;V&gt;&gt; 很简单,正如 Bobson 提到的那样。
  • @Servy,感谢您的帮助,我知道 Dictionary 和 LookUp 了解我们使用它们的用途和原因,但我想获得顺序查找。
【解决方案3】:

您可以使用列表字典Dictionary&lt;TKey, List&lt;TValue&gt;&gt;自己编写类型

您可以创建一个从该类继承的类,并添加合适的添加方法等来处理为给定键上的第一项创建新列表。

【讨论】:

  • 你知道 - 我一直使用这种结构,但我从未想过要创建一个类来处理它。我做了一些扩展方法,但不是一个类。好主意。
猜你喜欢
  • 2022-08-18
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
相关资源
最近更新 更多