2017-03-27 4 views
-2

Ich habe folgendes:Zusammenführen von zwei Wörterbücher basiert auf den gleichen Schlüssel

dict1 Dictionary<int, string> 
1, "A" 
2, "B" 
3, "C" 


dict2 Dictionary<int, string> 
1, "G" 
2, "H" 
3, "I" 

Ich möchte zwei ein drittes Wörterbuch erstellen, in dem der Schlüssel und Wert die Werte der oben, wo die Schlüssel passen:

dict3 Dictionary<strin, string> 
"A", "G" 
"B", "H" 
"C", "I" 

Ich kann dies mit zwei Schleifen sehr leicht erreichen, aber was wäre das Lambda-Äquivalent?

+1

, was Sie bisher –

Antwort

3

Join sie und verwenden ToDictionary

dict1.Join(dict2, kv => kv.Key, kv => kv.Key, 
       (kv1, kv2) => new {Val1 = kv1.Value, Val2 = kv2.Value}) 
      .ToDictionary(arg => arg.Val1, arg => arg.Val2); 
+0

Ich bevorzuge diese Methode, weil es offensichtlicher ist! –

1
dict1.ToDictionary(x => x.Value, x => dict2[x.Key]); 

Dies setzt voraus, dict1 keine doppelten Werte enthält und dict2 hat alle Schlüssel dict1 hat.

+2

KeyNotFound Ausnahme versucht haben, wenn ein Schlüssel fehlt –

0

Verwenden Enumerable.Join, um sicherzustellen, dass Sie Einträge ausgewählt werden, die beide existieren in der ersten und zweiten Wörterbücher:

dict1.Join(dict2, 
      d1 => d1.Key, 
      d2 => d2.Key, 
      (d1, d2) => new { Key = d1.Value, Value = d2.Value }) 
    .ToDictionary(x => x.Key, x => x.Value) 
Verwandte Themen