web-dev-qa-db-ja.com

重複キーを辞書に追加する方法

辞書に追加したいテキストファイルの行があります。初めて辞書を使用しています。開始行を追加しているときにOkでしたが、突然エラーが発生しました。

同じキーを持つアイテムが既に追加されています

ここに私のコードには、変更できない重複キーがあります。ここに私のコードはC#です

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

ここで、dialednoはキーであり、lineはテキストファイルの行です。キーに基づいて特定の行を取得するコードを次に示します。

string tansferOrginExt = previousLines[dialedno];

したがって、私の懸念は、可能であればディクショナリに重複キーを追加できるようにする方法であり、そうでない場合は同様の機能を取得する方法です。

22
Ram

辞書に重複キーを追加する方法

それは不可能。すべてのキーは一意である必要があります。 _Dictionary<TKey, TValue>_ 実装:

A _Dictionary<TKey, TValue>_のすべてのキーは、辞書の等値比較子に従って一意である必要があります。

可能な解決策-文字列のコレクションを値として保持することができます(つまり、_Dictionary<string, List<string>>_を使用します)、または(より良い)辞書の代わりに _Lookup<TKey, TValue>_ を使用できます。


重複キーをチェックし、辞書から以前の値を削除する方法は?

previousLines.ContainsKey(dialedno)を使用してキーが存在するかどうかを確認できますが、常に最後の行を保持する場合は、キーの辞書を置換するか、辞書にない場合は新しいキーを追加します。

_previousLines[dialedno] = line;
_
28

キーと値のペアのリストを使用できます

List<KeyValuePair<string, string>> myduplicateLovingDictionary= new List<KeyValuePair<string, string>>();
KeyValuePair<string,string> myItem = new KeyValuePair<string,string>(dialedno, line);
myduplicateLovingDictionary.Add(myItem);
14
wintersolider

重複するアイテムを辞書に追加することはできません。代わりに Lookup クラスを使用します。

Enumerable.ToLookupメソッド

IEnumerableから汎用Lookupを作成します。

6
Sadique

例:

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();
            }
         }
0
user10327722
List< KeyValuePair < string, string>> listKeyValPair= new List< KeyValuePair< string, string>>();
KeyValuePair< string, string> keyValue= new KeyValuePair< string, string>("KEY1", "VALUE1");
listKeyValPair.Add(keyValue);
0
Nagesh Hugar

同じキーを2回追加できるかどうかが質問の場合、答えは「いいえ」です。ただし、アイテムを繰り返し処理して特定のキーの値のカウントを増やしたい場合は、「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

0
avinava basu