Сопоставьте два списка в словаре на C #

Учитывая два IEnumerable s одинакового размера, как я могу преобразовать их в Dictionary с помощью Linq?

IEnumerable<string> keys = new List<string>() { "A", "B", "C" };
IEnumerable<string> values = new List<string>() { "Val A", "Val B", "Val C" };

var dictionary = /* Linq ? */;

И ожидаемый результат:

A: Val A
B: Val B
C: Val C

Интересно, есть ли какой-нибудь простой способ достичь этого.

И стоит ли мне беспокоиться о производительности? Что делать, если у меня большие коллекции?


Нет, если есть более простой способ, в настоящее время я делаю так:

У меня есть метод расширения, который будет зацикливать IEnumerable предоставив мне элемент и номер индекса.

public static class Ext
{
    public static void Each<T>(this IEnumerable els, Action<T, int> a)
    {
        int i = 0;
        foreach (T e in els)
        {
            a(e, i++);
        }
    }
}

И у меня есть метод, который будет зацикливать один из Enumerables и с помощью индекса извлекать эквивалентный элемент на другом Enumerable.

public static Dictionary<TKey, TValue> Merge<TKey, TValue>(IEnumerable<TKey> keys, IEnumerable<TValue> values)
{
    var dic = new Dictionary<TKey, TValue>();

    keys.Each<TKey>((x, i) =>
    {
        dic.Add(x, values.ElementAt(i));
    });

    return dic;
}

Затем я использую его как:

IEnumerable<string> keys = new List<string>() { "A", "B", "C" };
IEnumerable<string> values = new List<string>() { "Val A", "Val B", "Val C" };

var dic = Util.Merge(keys, values);

И вывод правильный:

A: Val A
B: Val B
C: Val C
67
задан BrunoLM 29 October 2010 в 18:22
поделиться