適切でエレガントな解決策が見つからないという問題に直面しています。ビデオに関する情報を含むクラスであるofList
があります。Videos
これらの情報には、startDate
、endDate
およびcameraId
プロパティがあります。
現在のデータベースには次の値があります。
startDate endDate
これらの値を繰り返し処理したいのですが、動画が最後の動画との差が 5 分以内で、同じcameraId
場合は 1 つとしてカウントする必要があります。しかし、このタスクを達成するための適切でエレガントな方法が見つかりません。
上記の動画リストの出力は次のようになります。
- 最初: 2013:03:01 18:25:26 -> 2013-03-01 18:34:29
- 2 番目: 2013:03:01 18:40:26 -> 2013:03:01 18:59:29
これは私がこれまでに持っているコードです:
private void ProcessVideos(List<Video> videos)
{
bool isSameVideo = false;
Video lastVideo = null;
//debugar e ver esquema do ultimo valor do database
DateTime startDate = DateTime.MinValue;
DateTime endDate = DateTime.MinValue;
for (int i = 1; i < videos.Count; i++)
{
TimeSpan timeSpan = new TimeSpan(videos[i].DataInicio.Ticks - videos[i - 1].DataFim.Ticks);
if (timeSpan.Minutes > 0 && timeSpan.Minutes < 5 && videos[i].IdCamera == videos[i - 1].IdCamera)
{
if (!isSameVideo)
{
isSameVideo = true;
startDate = videos[i - 1].DataInicio;
endDate = videos[i].DataFim;
}
else
{
endDate = videos[i].DataFim;
}
}
else
{
if (isSameVideo)
{
i++;
isSameVideo = false;
Debug.WriteLine("inicio: {0} fim: {1}", startDate, endDate);
startDate = DateTime.MinValue;
endDate = DateTime.MinValue;
}
Debug.WriteLine("inicio: {0} fim: {1}", videos[i - 1].DataInicio, videos[i - 1].DataFim);
}
}
if (startDate != DateTime.MinValue)
{
Debug.WriteLine("inicio: {0} fim: {1}", startDate, endDate);
}
}
主な質問は次のとおりです。これらの値を繰り返し処理し、タイムスパンの仕様に従って値の組み合わせを出力する適切なロジックは何ですか?