如何将重复键添加到词典中

我有一些文本文件的行,我想添加到Dictionary.I我第一次使用字典。虽然添加起始行它是好的但突然我得到错误:

已添加具有相同键的项目

在我的代码中有重复的密钥,我无法更改。这是我在c#中的代码

Dictionary previousLines = new Dictionary { }; previousLines.Add(dialedno, line); 

dialedno是键,行是文本文件行。 这是我根据键检索给定行的代码。

 string tansferOrginExt = previousLines[dialedno]; 

所以我关心的是如果可能允许在Dictionary中添加重复键,如果不能,我怎么能获得类似的function。

如何允许在Dictionary中添加重复键

这不可能。 所有键都应该是唯一的。 Dictionary实施:

根据字典的相等比较器Dictionary中的每个键必须是唯一的。

可能的解决方案 – 您可以将字符串集合保存为值(即使用Dictionary> ),或者(更好)您可以使用Lookup而不是字典。


如何检查重复键并从Dictionary中删除以前的值?

在添加新条目之前检查密钥是否存在:

 if (!previousLines.ContainsKey(dialedno)) previousLines.Add(dialedno, line); // add new entry else previousLines[dialedno] = line; // update entry value 

您还可以使用LINQ查询来创建仅包含每个键的最后一个值的字典(假设您具有dialednoline属性的对象序列):

 var previousLines = sequence.GroupBy(s => s.dialedno) .ToDictionary(g => g.Key, g => g.Last().line); 

我们可以使用键值对列表

 List> myduplicateLovingDictionary= new List>(); KeyValuePair myItem = new KeyValuePair(dialedno, line); myduplicateLovingDictionary.Add(myItem); 

无法将重复项添加到Dictionary中 – 另一种方法是使用Lookup类。

Enumerable.ToLookup方法

从IEnumerable创建一个通用的Lookup。

例:

 class Program { private static List> d = new List>(); static void Main(string[] args) { d.Add(new KeyValuePair("joe", 100)); d.Add(new KeyValuePair("joe", 200)); d.Add(new KeyValuePair("jim", 100)); var result = d.Where(x => x.Key == "joe"); foreach(var q in result) Console.WriteLine(q.Value ); Console.ReadLine(); } }