2 つの配列があるとします。
DateTime[] wDates = new DateTime[20000];
double[] wValues = new double[20000];
これらの 2 つの配列は両方とも順番に並べられます。つまり、int i が指定されます。wValues[i] は日付 wDates[i] です。
日付の月が 1 月である 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 オブジェクトを作成すると、1 日に何千万回も作成すると、メモリのオーバーヘッドが大きくなります。一時オブジェクトでも同じことが起こり、'index' を使用して配列のインデックスを結合しようとすると、ひどいパフォーマンスが発生します。
LINQ でこれを達成するためのより良い方法はありますか?
ありがとう、MM