Gol*_*den 5 c# algorithm time datetime timespan
我有一份工作项目清单.每个工作项都有开始和结束时间.
所以,基本上它看起来像这样:
List<Work> works = new List<Work>();
works.Add(new Work(
new DateTime(2013, 4, 30, 9, 0, 0),
new DateTime(2013, 4, 30, 11, 0, 0));
Run Code Online (Sandbox Code Playgroud)
现在我想得到工作的总时间.同样,基本上这很容易:
09:00-11:00 => 2 hours
13:00-17:00 => 4 hours
----
06:00 hours
Run Code Online (Sandbox Code Playgroud)
这只是总和.
但现在变得困难:如果我想提取平行时间,我如何计算这个总和呢?
例如,
09:00-11:00 => 2 hours
10:00-11:30 => 1.5 hours
13:00-17:00 => 4 hours
----
06:30 hours
Run Code Online (Sandbox Code Playgroud)
是6.5小时,但总和是7.5小时.两个工作项映射到10点到11点之间的时间这一事实有所不同.
我怎样才能解决这个问题,因为基本上每种可能的方式(周围,开始重叠,结束重叠,包括)可以相互重叠的任意数量的工作项?
创建(时间,值)对,其中值为+1,用于开始工作,-1为结束.然后按日期对对进行排序.迭代你得到的列表,你可以计算出值的总和 - 当它是正数时,工作就是"继续".在迭代时,标记值总和从0到正,从正到0的时刻.您将得到不相交的间隔.
例:
11 - 13,12 - 16,15 - 17,18 - 19
给你(11,1)(12,1)(13 -1)(15,1)(16,-1)(17,-1)(18,1)(19,-1)
总和为(11,1)(12,2)(13 1)(15,2)(16,1)(17,1)(18,1)(19,0),
所以不相交的时期是(11,17)和(18,19)