使用ToDictionary创建字典

6 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];
        }
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 14

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

var res = ListA.Zip(ListB, (a,b) => new {a, b})
               .ToDictionary(p=>p.a, p=>p.b);
Run Code Online (Sandbox Code Playgroud)

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

  • @MassimilianoPeluso这个实现绝对没有任何效率:它在`O(N)`中完成,不执行不必要的查找,并在一个简单的语句中完成一些原本需要循环的东西.虽然理论上可能会慢一些,但人们很难找到一个自然的例子,其中效率如此重要,以至于需要将此声明重写为更有效的方法.无论如何,在没有分析的情况下重写效率是过早微优化的某种情况. (2认同)