1

C#では、List<Tuple<DateTime,Double>>名前付きの時系列があります。時系列からいくつかの基本的な統計(平均など)と日付のサブセットを計算しようとしています。たとえば、次の平均を計算したいと思います。

  • 1か月(つまり、今日から1か月前)
  • 3ヶ月
  • 六ヶ月
  • 1年

私の考えは、ループを使用して上記のそれぞれを調べ、時系列から日付を削除して、関心のあるタプルだけのデータを減らすことでした。しかし、これはかなり非効率的なようです...

誰かが私がこれをどのように行うことができるかについて何か考えがありますか?LINQはそれを行いますか?

ありがとう!

4

2 に答える 2

1

これは1か月間で、3か月または6か月と同じです。

var dataForOneMonth = dataList.Where(t => t.Item1 >= DateTime.Now.AddMonths(-1) 
                           && t.Item1 <= DateTime.Now);


 var sum = dataForOneMonth.Sum(t => t.Item2);
 var avg = dataForOneMonth.Average(t => t.Item2);
于 2012-10-01T17:15:09.367 に答える
1

Linqがこれを実行できなかった理由はわかりません(ただし、これが最善のアプローチであるとは限りません)。私の頭のてっぺんから、このような何かがうまくいくかもしれません:

// Assign some tuple data to 'dataList'
List<Tuple<DateTime,Double>> dataList = SomeTupleData

// Filter all the rows to just the dates desired.
dataList
  .Where(row => row.Item1 >= startDate && row.Item1 <= endDate)
  .Average(row => row.Item2)
于 2012-10-01T17:11:05.953 に答える