3

C# には 2 つの辞書 (キーと値のペア オブジェクト) があります。辞書 A と B を比較し、両方の辞書にあるすべてのキーに対して次の操作を行います
。 1. 辞書 A の値を辞書 B の値に置き換えます
2. 一致するキーを辞書 B から削除します

例は次のとおりです。

初期辞書:

A={" Key1:value1 "," Key2:value2 "}
B={" Key3:bla "," key1:hello "," Key4:bla "," Key2:world "}

その後:

A={" Key1:hello "," Key2:world "}
B={" Key3:bla "," Key4:bla "}

これを行う最善の方法を知りたいのですが、これはLINQで達成できると確信していますが、私はまだ初心者です。どんな助けも大歓迎です。

4

2 に答える 2

3

アニの答えがどこに行ったのかはわかりませんが、同様の解決策は次のとおりです。

foreach (var k in A.Keys.ToList())
{
    if (B.ContainsKey(k))
    {
        A[k] = B[k];
        B.Remove(k);
    }
}

編集すると、コレクションが変更されたと考えて、ループInvalidOperationExceptionを通過するときに元のコードがスローするように見えます。foreach詳細については、この質問を参照してください。 ToList()必要とされている。

于 2012-08-23T15:32:35.817 に答える
2

もう少しコンパクトな別のオプションを次に示します。

    var keys = dictionaryA.Keys.Where(x => dictionaryB.Keys.Contains(x)).ToArray();
    foreach(var key in keys)
    {
         dictionaryA[key] = dictionaryB[key];
         dictionaryB.Remove(key);
    }
于 2012-08-23T15:45:24.863 に答える