2010-03-12 14 views
14

Ich versuche, ein Wörterbuch aus 2 Listen zu erstellen, wo eine Liste Schlüssel enthält und eine Liste Werte enthält. Ich kann es mit for-Schleife tun, aber ich versuche zu finden, ob es eine Möglichkeit gibt, es mit LINQ zu tun. Beispielcode wird hilfreich sein. Vielen Dank!!!!Erstellen Sie ein Wörterbuch mit 2 Listen mit LINQ

Antwort

38

In .NET4 Sie die eingebaute in Zip Verfahren zu verschmelzen die beiden Sequenzen von einem ToDictionary Aufruf gefolgt verwenden:

var keys = new List<int> { 1, 2, 3 }; 
var values = new List<string> { "one", "two", "three" }; 

var dictionary = keys.Zip(values, (k, v) => new { Key = k, Value = v }) 
        .ToDictionary(x => x.Key, x => x.Value); 
20

Dies setzt natürlich voraus, dass die Länge jeder Liste gleich ist und dass die Schlüssel eindeutig sind.

UPDATE:This answer ist viel effizienter und sollte für Listen von nicht-trivialen Größe verwendet werden.

+0

ich eher eine Schleife verwenden würde, anstatt diese zu verwenden. Noch +1 für die Antwort. – Steven

+0

Das war es. Vielen Dank!!! – VNarasimhaM

+0

Warum würden Sie Schleifen anstelle von LINQ verwenden? Ich dachte, dieser Code ist viel besser und lesbarer als die for-Schleife. – VNarasimhaM

4

Sie können den Index in einem Select Ausdruck umfassen, um diese effizient:

 var a = new List<string>() { "A", "B", "C" }; 
     var b = new List<string>() { "1", "2", "3" }; 

     var c = a.Select((x, i) => new {key = x, value = b[i]}).ToDictionary(e => e.key, e => e.value); 

     foreach (var d in c) 
      Console.WriteLine(d.Key + " = " + d.Value); 

     Console.ReadKey(); 
-3

Sie können diesen Code verwenden und perfekt arbeiten.

C# Code:

var keys = new List<string> { "Kalu", "Kishan", "Gourav" }; 
     var values = new List<string> { "Singh", "Paneri", "Jain" }; 

     Dictionary<string, string> dictionary = new Dictionary<string, string>(); 
     for (int i = 0; i < keys.Count; i++) 
     { 

      dictionary.Add(keys[i].ToString(), values[i].ToString()); 
     } 
     foreach (var data in dictionary) 
     { 
      Console.WriteLine("{0} {1}", data.Key, data.Value); 

     } 
     Console.ReadLine(); 

Output Screen:

enter image description here

+0

Zu umständlich eine Aufgabe – netfed

1
var dic = keys.Zip(values, (k, v) => new { k, v }) 
      .ToDictionary(x => x.k, x => x.v); 
+2

Fügt das wirklich etwas zu [LukeH] (http://stackoverflow.com/users/55847/luke) 's [5 Jahre alte Antwort] (http://stackoverflow.com/a/ 2434647/215380)? – Rawling

Verwandte Themen