平均3 IEnumebles

Mik*_*ike 0 c# linq ienumerable

我需要平均3个IEnumerable集合并创建一个新的IEnumerable,其结果如下:

var result1 = GetResult1()//Returns an enumerable collection having elements 1,2,3,4

var result2 = GetResult2()//Returns an enumerable collection having elements 3,4,2,6

var result3 = GetResult3()//returns an enumerable collection having elements 2,5,1,6

//I need to create a collection which has the averages of the above results as below:

var result4 = GetResult4()//Should return 2.00,3.67,2.33,5.33.
Run Code Online (Sandbox Code Playgroud)
  • 每个结果将具有相同数量的元素,即result1,result2,result3将具有相同数量的元素(在这种情况下为4,但实际上它可以在1500之前).

  • 结果中的每个元素对应于结果的平均值,即在result4集合中,第一个元素将是1,3,2的平均值,其分别对应于result1,result2,result3中的第一个元素的平均值,因此也是如此.

  • 生成的集合应该具有舍入为2的小数位.

一个明显的答案是迭代集合中的每个元素并手动创建结果集合中的元素(即通过for循环),但是我想避免它,因为结果将在每个集合中具有接近1500个元素并且希望使用LINQ做一些懒惰的评估.

请问你能指点一下吗?

干杯, - 迈克

Jon*_*eet 7

如果您使用的是.NET 4,则可以Enumerable.Zip在此处使用效果良好:

var averages = result1.Zip(result2, (x, y) => x + y)
                      .Zip(result3, (xy, z) => (xy + z) / 3.0d)
                      .ToList();
Run Code Online (Sandbox Code Playgroud)

这不会进行任何舍入 - 这通常更适合格式化步骤.请注意,无论如何,这些值只能以0,0.33或0.67结尾,因为你只是除以3.我已经使用了double但另一种选择是使用decimal- 它取决于值的真正含义.