2017-02-13 14 views
0

同じキーで異なる値を持つ2つの辞書があります。私は、辞書1の中で1に等しいすべての値を見つけ、それを辞書2の値で置き換える必要があります。私は最初の辞書を編集することができますか、より良いアイデアは、どちらかの方法で別の辞書に新しい値を保存することです。私の考えは、foreachループを使い、辞書1 == 1の値を見つけて辞書2の中に入り、そのキーの値を抽出し、そのキーのdictionary1または別の辞書に保存することでした。C#ある辞書から別の辞書に値を置き換える

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Practice_With_Dictionaries 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 


       object[] keys= new object[5]; 
       keys[0] = "1111"; 
       keys[1] = "2222"; 
       kesy[2] = "3333"; 
       kesy[3] = "4444"; 
       kesy[4] = "5555"; 


       object[] speed = new object[5]; 
       speed[0] = 1; 
       speed[1] = 2; 
       speed[2] = 1; 
       speed[3] = 1; 
       speed[4] = 5; 

       object[] speed2 = new object[5]; 
       speed2[0] = 1; 
       speed2[1] = 2; 
       speed2[2] = 3; 
       speed2[3] = 4; 
       speed2[4] = 5; 





    Dictionary<object, object> dictionary1 = new Dictionary<object,object>(); 
    Dictionary<object, object> dictionar2 = new Dictionary<object, object>(); 

       for (int iRow = 0; iRow < interfaceKeys.Length; iRow++) 
       { 

        dictionary1.Add(keys[iRow], (double)speed[iRow]); 
        dictionary2.Add(keys[iRow], (double)speed2[iRow]); 


       } 


       // for each loop with if statements 




     } 
    } 
} 
+0

しかし、2つの辞書はありません。あなたは辞書を作りたいですか? – kat1330

+0

コード例があなたの質問と一致しません。コード例で辞書を作成すれば、どのデータから始めることができますか?コレクションのイニシャライザ構文を使用することもできます(https://msdn.microsoft.com/en-us/library/bb531208.aspx) – JamesFaix

+0

辞書を2つ宣言しました。辞書<オブジェクト、オブジェクト>辞書1 =新しい辞書<オブジェクト、オブジェクト>( ); ディクショナリ dictionar2 = newディクショナリ();上記のコードでは彼らは同じキーですが、異なる値を持っています。私はlinqを使用して見ている答えは、私が欲しいものを達成するための最良の方法です。 – Chejua

答えて

0
まず

、あなたがキーとしてstringを持っている場合、およびint値として、あなたはDictionary<string, int>代わりのDictionary<object, object>使用する必要があります。あなたは、常に2つの辞書とのマッチングのキーを持っている場合今

Dictionary<string, int> dictionary1 = new Dictionary<string, int>(); 
Dictionary<string, int> dictionary2 = new Dictionary<string, int>(); 
// fill your dictionaries 

var keys = dictionary1.Where(kvp => kvp.Value == 1).Select(kvp => kvp.Key); 
foreach (var key in keys) 
    dictionary1[key] = dictionary2[key]; 

そうでない場合

var keys = dictionary1.Where(kvp => kvp.Value == 1).Select(kvp => kvp.Key); 
foreach (var key in keys) 
{ 
    int value; 
    if (dictionary2.TryGetValue(key, out value)) 
     dictionary1[key] = value; 
} 
0
あなたはLINQと ToDictionary方法を使用することができます

(私はあなたのコードを簡素化するためにいくつかの変更を加えました私はこれが受け入れられることを望みます):

static void Main(string[] args) 
{ 
    var keys = new string[5] { "1111", "2222", "3333", "4444", "5555" }; 

    var speed = new double[5] { 1, 2, 1, 1, 5 }; 

    var speed2 = new double[5] { 1, 2, 3, 4, 5 }; 

    var dictionary1 = new Dictionary<string, double>(); 
    var dictionary2 = new Dictionary<string, double>(); 

    for (int iRow = 0; iRow < keys.Length; iRow++) 
    { 
     dictionary1.Add(keys[iRow], speed[iRow]); 
     dictionary2.Add(keys[iRow], speed2[iRow]); 
    } 

    // the solution 
    var result = dictionary1.ToDictionary(x => x.Key, kv => kv.Value == 1 ? dictionary2[kv.Key] : kv.Value); 
} 
0

この

var dictionary1 = new Dictionary<string, string> 
{ 
    {"a", "1"}, 
    {"b", "2"}, 
    {"c", "3"}, 
    {"d", "3"} 
}; 



var dictionary2 = new Dictionary<string, string> 
{ 
    {"a", "1"}, 
    {"b", "22"}, 
    {"c", "33"} 
}; 

var result = dictionary1 
    .Where(d => dictionary2.ContainsKey(d.Key) && dictionary2[d.Key] == d.Value); 

結果はdictinary1の値を持つdictinary1とdictinary2で同じキーを持つすべての値が含まれていますようにあなたが何かを行うことができます。

関連する問題