Carte deux listes dans un dictionnaire en C#

Donné deux IEnumerables de la même taille, comment puis-je convertir Dictionary à l'aide de 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 ? */;

Et la sortie attendue est:

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

Je me demande si il y a un moyen simple pour y parvenir.

Et devrais-je être inquiet au sujet de la performance? Que faire si j'ai de grandes collections?


Je ne suis pas si il y a un moyen plus facile de le faire, actuellement, je fais comme ceci:

J'ai une méthode d'Extension qui boucle la IEnumerable qui m'a fourni l'élément et le numéro d'index.

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

Et j'ai une méthode qui boucle l'un des Enumerables et avec l'indice de récupérer l'élément équivalent sur les autres Énumérable.

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

Puis-je l'utiliser comme:

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

Et la sortie est correcte:

A: Val A
B: Val B
C: Val C
InformationsquelleAutor BrunoLM | 2010-10-28