0

アドバイスをいただければと思いました。

私は2つの辞書を持っています

Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
Dictionary<string, List<string>> dictFinal = new Dictionary<string, List<string>>();

どちらの場合も、キー値は同じですが、文字列値の異なるリストを表しています。

ここに画像の説明を入力

私が欲しいのは、同じキー値を持つ1つの辞書と、1つの辞書にマージされる文字列値のリストを持つことです

ここに画像の説明を入力

私は深刻なループから始めましたが、すぐにこれがおそらく最善の解決策ではないことに気付きました

foreach (var fin in dictFinal)
            {
                foreach (var valFin in fin.Value)
                {
                    foreach (var kvp in dict)
                    {
                        foreach (var v in kvp.Value)
                        {

                        }
                    }

                }

            }

これらの 2 つの辞書を「一緒に」するためのより良い方法はありますか?

4

3 に答える 3

3
Dictionary<string, List<string>> d1 = new Dictionary<string, List<string>>();
Dictionary<string, List<string>> d2 = new Dictionary<string, List<string>>();
d2.ToList().ForEach(x =>
                         {
                           if (d1.ContainsKey(x.Key))
                             d1[x.Key].AddRange(x.Value);
                           else
                             d1.Add(x.Key, x.Value);
                         });

これにより、両方の辞書が にマージされd1ます。

それなしToList()

foreach(var x in d1)
{
  if (d1.ContainsKey(x.Key))
    d1[x.Key].AddRange(x.Value);
  else
    d1.Add(x.Key, x.Value);
}
于 2013-02-21T09:21:02.193 に答える
1

ループを使用します。マージするとは、リストに一意の文字列が含まれている必要があることを意味します。

foreach (var kvp in dict)
{
    List<string> listInDict2;
    if (dictFinal.TryGetValue(kvp.Key, out listInDict2))
        dictFinal[kvp.Key] = kvp.Value.Union(listInDict2).ToList();
    else
        dictFinal.Add(kvp.Key, kvp.Value);
}
于 2013-02-21T09:31:04.090 に答える
1

あなたはで試すことができます

結果をマージするUNIONまたはJOINメソッド

dictFinal.unionまたはdictFinal.join

于 2013-02-21T09:31:13.030 に答える