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

时间:2014-03-10 10:16:56

标签: c# string dictionary key text-files

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

  

已添加具有相同键的项目

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

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

这里dialedno是键,line是文本文件行。 这是我从中检索给定行的代码。

string tansferOrginExt = previousLines[dialedno];

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

6 个答案:

答案 0 :(得分:28)

  

如何在Dictionary中添加重复键

这是不可能的。所有键都应该是唯一的。当Dictionary<TKey, TValue>实施时:

  

Dictionary<TKey, TValue>中的每个键都必须是唯一的   字典的平等比较。

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


  

如何检查重复的密钥并从中删除以前的值   字典?

您可以检查密钥是否与previousLines.ContainsKey(dialedno)一起存在,但是如果您始终想要保留最后一行,则只需替换该密钥的字典,或者添加新密钥(如果它不在字典中):

previousLines[dialedno] = line;

答案 1 :(得分:14)

我们可以使用键值对列表

itextg

答案 2 :(得分:6)

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

Enumerable.ToLookup Method

  

从IEnumerable创建一个通用的Lookup。

答案 3 :(得分:0)

示例:

class Program
        {
             private static List<KeyValuePair<string, int>> d = new List<KeyValuePair<string, int>>();

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

答案 4 :(得分:0)

List< KeyValuePair < string, string>> listKeyValPair= new List< KeyValuePair< string, string>>();
KeyValuePair< string, string> keyValue= new KeyValuePair< string, string>("KEY1", "VALUE1");
listKeyValPair.Add(keyValue);

答案 5 :(得分:0)

如果您的问题是是否可以两次添加相同的密钥,则答案为否。 但是,如果只想遍历项目,然后增加特定Key的值计数,则可以使用“ TryAdd”方法来实现。

var dict = new Dictionary<int, int>();
        foreach (var item in array)
        {
            dict.TryAdd(item, 0);
            dict[item]++;
        }

使用这种方法可以实现我们试图实现的目标.``

https://docs.microsoft.com/en-us/dotnet/api/system.collections.concurrent.concurrentdictionary-2.tryadd?view=netframework-4.7.2