【发布时间】:2012-05-17 16:05:28
【问题描述】:
假设我们有两个数组:
DateTime[] wDates = new DateTime[20000];
double[] wValues = new double[20000];
这两个数组都是按顺序排列的,即给定一个int i,wValues[i]代表日期wDates[i]。
假设我们需要获取日期为一月的 wValues 的平均值
使用标准循环将是:
double wAvg = 0.0;
int wDataCount = 0;
for (int i=0; i < 20000; i++)
if (wDates[i].Month == 1)
{
wAvg += wValues[i];
wDataCount++;
}
if (wDataCount > 0)
wAvg /= wDataCount;
我想知道如何在 LINQ 中执行此操作? 我可以创建一个包含两个值的结构/类 DateDouble,然后执行以下操作:
List<DateDouble> wListData = new List<DateDouble>();
Add the items...
double wAvg = (from d in wListData
where d.Date.Month == 1
select d.Value).Average();
但是当每天完成数千万次时,创建数千个 DateDouble 对象将是一个巨大的内存开销。临时对象也会发生同样的情况,尝试使用“索引”并在数组上加入索引会产生糟糕的性能。
在 LINQ 中是否有更好的方法来实现这一点?
谢谢, 嗯
【问题讨论】: