2017-02-13 2 views
0

Ich habe 2 Wörterbücher mit den gleichen Schlüsseln aber unterschiedlichen Werten. Ich muss in dictionary1 alle Werte finden, die gleich 1 sind, und sie durch den Wert in dictionary2 ersetzen. Ich könnte das erste Wörterbuch bearbeiten oder bessere Idee ist es, die neuen Werte in einem anderen Wörterbuch zu speichern. Meine Idee war, eine foreach-Schleife zu verwenden und dann alle Werte in dictionary1 == 1 zu suchen, dann in dictionary2 zu gehen und diesen Wert für diesen Schlüssel zu extrahieren und ihn in dictionary1 oder einem anderen Wörterbuch für diesen Schlüssel zu speichern.C# Ersetzen von Werten von einem Wörterbuch zu einem anderen

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

Aber Sie haben nicht zwei Wörterbücher. Sie möchten Wörterbücher erstellen? – kat1330

+0

Ihr Codebeispiel stimmt nicht mit Ihrer Frage überein. Können Sie Wörterbücher in Ihrem Codebeispiel erstellen, damit wir sehen können, mit welchen Daten Sie beginnen? Sie können auch die Initialisierungssyntax für Sammlungen verwenden (https://msdn.microsoft.com/en-us/library/bb531208.aspx) – JamesFaix

+0

Ich habe zwei Wörterbücher deklariert Wörterbuch Wörterbuch1 = neues Wörterbuch (); Dictionary Dictionar2 = neues Dictionary (); im obigen Code. Sie haben die gleichen Schlüssel, aber unterschiedliche Werte. Von den Antworten, die ich mit linq sehe, ist der beste Weg, um zu erreichen, was ich will. – Chejua

Antwort

0

Vor allem, wenn Sie string als Schlüssel haben, und int als Wert, dann sollten Sie Dictionary<string, int> statt Dictionary<object, object> verwenden.

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

Nun, wenn Sie immer passende Schlüssel zwischen zwei Wörterbücher haben:

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

Ansonsten

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

Sie LINQ verwenden können und die ToDictionary Methode (Ich habe einige Änderungen Ihren Code zu vereinfachen Ich hoffe, das ist akzeptabel):

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

Sie so etwas wie dieses

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); 

Ergebnis tun könnten, werden alle Werte enthalten, die gleichen Tasten in dictinary1 und dictinary2 mit Werten in dictinary1 haben.

Verwandte Themen