我面临一个问题,我找不到合适而优雅的解决方案。我有一个List
of Videos
,这是一个包含有关视频信息的类。在这些信息中有一个startDate
,endDate
和一个cameraId
属性。
我当前的数据库具有以下值:
startDate endDate
我想遍历这些值,当一个视频与上一个视频相差 5 分钟以内并且具有相同的值时,cameraId
它应该算作一个。但我找不到完成这项任务的适当或优雅的方式。
上面显示的视频列表的输出应该是
- 第一次:2013:03:01 18:25:26 -> 2013-03-01 18:34:29
- 第二次: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);
}
}
主要问题是:遍历这些值并根据时间跨度规范输出值组合的良好逻辑是什么?