0

リストがあります:

List<DateTime> timeStamp;

リストに次の DateTimes が含まれているとします。

2006-09-07 11:46:09
2006-09-07 11:46:19
2006-09-07 11:46:20
2006-09-07 11:46:36

2006-09-07 11:47:49
2006-09-07 11:47:53
2006-09-07 11:48:02
2006-09-07 11:48:15
2006-09-07 11:48:29
2006-09-07 11:48:34

2006-09-07 11:54:29
2006-09-07 11:54:39
2006-09-07 11:54:49
2006-09-07 11:54:59

2006-09-07 11:56:19
2006-09-07 11:56:29
2006-09-07 11:56:39 

2006-09-07 11:58:29
2006-09-07 11:58:34
2006-09-07 11:58:45
2006-09-07 11:58:53

2006-09-07 12:00:29
2006-09-07 12:00:39
2006-09-07 12:00:45
2006-09-07 12:00:54
2006-09-07 12:01:03

ここで、合計累積時間を計算したいと思います。これらの時間はすべて同じリストにあり、ギャップは停止/開始セクションを表します。また、タイムスタンプの間隔を制御することもできません。10秒かもしれないし、1分かもしれない。助けてくれてありがとう!

4

1 に答える 1

2

ギャップの長さを定義できる場合の新しい回答は次のとおりです。

var length = timestamps
           .Zip(timestamps.Skip(1), (a, b) => b - a)      // pairwise entries and timespan
           .Where(gap => gap < TimeSpan.FromSeconds(180)) // ignore large gaps
           .Sum(x => x.TotalMilliseconds);                // total span in ms

これは、リストをそれ自体に対して圧縮することで機能し、隣り合ったエントリを選択できるようにします (つまり、リストは「ペアワイズ」で選択されます)。タイムスパンはこれらから計算され、大きなタイムスパン (つまり、無視したい間隔) は除外されます。

于 2012-04-23T21:03:12.173 に答える