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

Ram*_*Ram 22 c# string dictionary key text-files

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

已添加具有相同键的项目

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

Dictionary<string, string> previousLines = new Dictionary<string, string> { };
previousLines.Add(dialedno, line);
Run Code Online (Sandbox Code Playgroud)

dialedno是键,行是文本文件行.这是我从中检索基于密钥的给定行的代码.

string tansferOrginExt = previousLines[dialedno];
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*kiy 28

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

这不可能.所有键都应该是唯一的.作为Dictionary<TKey, TValue>实现:

Dictionary<TKey, TValue>根据字典的相等比较器,a中的每个键必须是唯一的.

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


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

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

previousLines[dialedno] = line;
Run Code Online (Sandbox Code Playgroud)

您还可以使用LINQ查询来创建仅包含每个键的最后一个值的字典(假设您具有带有previousLines.ContainsKey(dialedno)Dictionary<TKey, TValue>属性的对象序列):

previousLines[dialedno] = line;
Run Code Online (Sandbox Code Playgroud)

  • 为什么不直接使用 'previousLines[dialedno] = line' 而不进行 ContainsKey 检查? (2认同)

win*_*der 15

我们可以使用键值对列表

List<KeyValuePair<string, string>> myduplicateLovingDictionary= new List<KeyValuePair<string, string>>();
KeyValuePair<string,string> myItem = new KeyValuePair<string,string>(dialedno, line);
myduplicateLovingDictionary.Add(myItem);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的实际回答。比**无法完成**功能多得多。 (2认同)

Sad*_*que 6

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

Enumerable.ToLookup方法

从IEnumerable创建一个通用的Lookup.