组合List <list <double>&gt; </list <double>

时间:2014-06-11 07:17:06

标签: c# linq list

我有两个List<List<double>>说x和y。我需要创建一个新的List<List<double>> z,其中每个元素都是Math.sqrt(xElem + yElem),其中xElem和yElem分别是x和t的对应元素。我可以在C#中使用LinQ使用单个语句吗?

1 个答案:

答案 0 :(得分:4)

要在单个Linq语句中处理多个序列,首先需要Zip。由于你有列表列表,你也需要压缩每对内部列表(可能同时计算结果)。比正常ToList更新回来构建新列表。

 first.Zip(second, 
     (f,s)=> f.Zip(s, 
        (x,y)=> Math.Sqrt(x+y)).ToList()).ToList()

注意:正如Sayse所指出的,如果序列具有不同的长度,则该代码将产生仅在较短序列的长度上产生结果。如果你需要以某种方式处理不同长度的序列,你需要弄清楚如何处理只有一个序列有元素的部分。在这种情况下,使用for进行常规迭代并对两个列表建立索引可能是更具可读性的方法。