2012-11-01 37 views
7

可能重复:
Is there an alternative to Dictionary/SortedList that allows duplicates?字典用复制的钥匙

我要寻找一个字典排序类的,可以有重复键。

我搜索一下,发现Lookup类可以用来存储重复键,但它没有默认构造函数,因此,没有任何其他对象来查找我们不能初始化。

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

所以,我的问题是,是否有.NET Framework 3.5的任何一类,其行为类似于字典,但让我有重复键,如查找?

+7

我可以问你为什么想复制密钥?您可以将数组存储为您的值。 – LightStriker

+0

@ Marc-AndréJutras,是的,我想将用户操作与其受影响的内容一起存储,以便对受影响的对象执行合并操作。我可以一个接一个地做,但这样很耗时,所以我只是将它们存储起来,然后在一个单独的环境中执行,所以只有那个行动需要时间而不是全部。 –

+0

如何使用'字典>'而不是'Dictinary ',类似于Lookup? –

回答

12

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

+1

这就像Ninject的['MultiMap'](https://github.com/ninject/ninject/blob/d663e013632780ca3d47818b7ba372a103a4ac9d/src/Ninject/Infrastructure/Multimap.cs) – khellang

+1

我用'Dictionary > (或类似)。 – Bobson

+1

@khellang是的,这只是一个围绕'字典>'的包装;它实际上并没有为你做太多的事情,但它确实有点用处。通常我发现使用“字典”直接很简单,就像Bobson提到的那样。 – Servy

19

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

​​
+2

但是,它不是一个逻辑上的字典,它只是一个对的列表。 (这可能是他需要/想要的,我只是技术。) – Servy

+0

但是,然后关键检索将受到影响。一本字典在关键研究中速度很快。 – LightStriker

+0

的确如此,但我不确定你如何拥有允许重复键并保留字典优点的东西。看起来他应该使用带有值列表的字典,这样当一个密钥被复制时,第二个值将被添加到列表中,并且在查找密钥时都会被检索到。 [编辑:塞维维在他的回答中说,提高他的答案] – madeFromCode

3

您可以通过使用列表的字典组成一类自己,Dictionary<TKey, List<TValue>>

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

+0

你知道 - 我一直都在使用这种结构,但我从来没有想过要让一个班级来处理它。我做了一些扩展方法,但不是一个类。好主意。 – Bobson