Создать словарь, используя 2 списка, используя LINQ

Я пытаюсь создать словарь из 2 списков, где один список содержит ключи, а один список содержит значения. Я могу сделать это, используя for loop, но я пытаюсь найти, если есть способ сделать это с помощью LINQ. Пример кода будет полезен. Спасибо!!!!

Ответы

Ответ 1

В .NET4 вы можете использовать встроенный метод Zip для слияния двух последовательностей, за которым следует ToDictionary call:

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

Ответ 2

        List<string> keys = new List<string>();
        List<string> values = new List<string>();
        Dictionary<string, string> dict = keys.ToDictionary(x => x, x => values[keys.IndexOf(x)]);

Это, конечно, предполагает, что длина каждого списка одинакова и что ключи уникальны.

UPDATE: Этот ответ намного эффективнее и должен использоваться для списков нетривиального размера.

Ответ 3

Вы можете включить индекс в выражение Select, чтобы сделать это эффективным:

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

Ответ 4

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

Ответ 5

Вы можете использовать этот код и работать отлично.

Код С#:

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

Экран вывода:

enter image description here