C# 使用LINQ使用2个列表创建字典

C# 使用LINQ使用2个列表创建字典,c#,linq,C#,Linq,我试图从两个列表中创建一个字典,其中一个列表包含键,另一个列表包含值。我可以使用for循环来完成它,但我正在尝试寻找是否有一种使用LINQ来完成它的方法。 示例代码将非常有用。谢谢 List key=new List(); List<string> keys = new List<string>(); List<string> values = new List<string>(); Dictiona

我试图从两个列表中创建一个字典,其中一个列表包含键,另一个列表包含值。我可以使用for循环来完成它,但我正在尝试寻找是否有一种使用LINQ来完成它的方法。 示例代码将非常有用。谢谢

List key=new List();
        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)]);
列表值=新列表(); Dictionary dict=keys.ToDictionary(x=>x,x=>value[keys.IndexOf(x)];
当然,这假定每个列表的长度相同,并且键是唯一的


更新:效率更高,应用于非平凡大小的列表。

您可以在
选择表达式中包含索引,以提高效率:

        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();
var a=newlist(){“a”、“B”、“C”};
var b=新列表(){“1”、“2”、“3”};
var c=a.Select((x,i)=>new{key=x,value=b[i]});
foreach(c中的变量d)
Console.WriteLine(d.Key+“=”+d.Value);
Console.ReadKey();

在.NET4中,您可以使用内置方法合并两个序列,然后调用:

var-keys=新列表{1,2,3};
var值=新列表{“一”、“二”、“三”};
var dictionary=keys.Zip(值,(k,v)=>new{Key=k,Value=v})
.ToDictionary(x=>x.Key,x=>x.Value);

您可以使用此代码并完美地工作

C#代码:

var key=新列表{“Kalu”、“Kishan”、“Gourav”};
var值=新列表{“Singh”、“Paneri”、“Jain”};
字典=新字典();
对于(int i=0;i
输出屏幕:

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

我宁愿使用循环,而不是使用此循环。答案仍然是+1。为什么要使用循环而不是LINQ?我认为这段代码比for循环更简洁易读,因为使用上面的代码,它必须对每个键的键列表中的元素x进行线性搜索(在O(n)时间内)。在循环中,索引在每次迭代中都是已知的,因此不需要搜索。正如@PaulRuane指出的,但我认为值得强调的是,因为这是最重要的答案,这个解决方案效率非常低,是一个潜在的、完全不必要的瓶颈,应该避免。相反,请看。这真的给的增加了什么吗?太麻烦了
  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();
var dic = keys.Zip(values, (k, v) => new { k, v })
          .ToDictionary(x => x.k, x => x.v);