使用ToDictionary创建字典

时间:2013-01-22 13:56:34

标签: c# linq c#-4.0

我有两个大小相同的字符串列表。 我想创建一个字典,密钥来自listA,值来自listB

什么是快速方式?

我使用了代码:

        List<string> ListA;
        List<string> ListB;
        Dictionary<string,string> dict = new Dictionary<string,string>();
        for(int i=0;i<ListA.Count;i++)
        {
              dict[key] = listA[i];
              dict[value]= listB[i];
        }

我不喜欢这种方式,我可以使用ToDictionary方法吗?

4 个答案:

答案 0 :(得分:14)

从.NET 4.0开始,您可以使用LINQ的Zip方法,如下所示:

var res = ListA.Zip(ListB, (a,b) => new {a, b})
               .ToDictionary(p=>p.a, p=>p.b);
  

[Zip]方法将第一个序列的每个元素与第二个序列中具有相同索引的元素合并。

答案 1 :(得分:4)

您可以使用索引创建一个匿名类型,您可以使用该索引获取此索引处的B

Dictionary<string, string> dict = ListA
    .Select((a, i) => new { A = a, Index = i })
    .ToDictionary(x => x.A, x => ListB.ElementAtOrDefault(x.Index));

请注意,如果null小于ListB,则值为ListA

答案 2 :(得分:2)

我不会打扰(如果可能的话),因为您的版本可读,易于调试,并且比任何其他LINQ解决方案更快(特别是如果您使用的是大型列表)。

答案 3 :(得分:2)

我不会改变你的版本。

下面的代码比你的情况下的LINQ内容更具可读性,恕我直言。

var ListA = new List<string>();
var ListB = new List<string>();
var dict = new Dictionary<string, string>();

for (int i = 0; i < ListA.Count; i++)
{
    dict.Add(ListA[i], ListB[i]);
}
相关问题