如何将重复键添加到词典中
我有一些文本文件的行,我想添加到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查询来创建仅包含每个键的最后一个值的字典(假设您具有dialedno
和line
属性的对象序列):
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(); } }