我有一组矩范围对象:
a = range(2018-10-01 -> 2018-10-05)
b = range(2018-10-10 -> 2018-10-15)
c = range(2018-10-15 -> 2018-10-20)
d = range(2018-10-21 -> 2018-10-25)
所以我们有一些相邻的范围,但没有重叠的。我也有一个主要范围:
primary = range(2018-10-01 -> 2018-10-31)
最终目标是创建一些使用其他范围检查主要范围覆盖范围的函数:
coverage(primary, [a,b,c,d])
// returns 21
// (5 days + 6 days + 5 days + 5 days)
我知道范围是时间(毫秒)而不是基于天的,但我最好稍后在我的函数中的某个地方转换为那个。
请注意,它不会重复计算2018-10-15
。我为此考虑的主要解决方案是遍历每个范围,如果它们相邻或相邻,则使用add方法{adjacent:true}
将范围合并为最大可能的块。这仍然可能给我留下一些空白,并且需要通过蛮力来找到主要范围内的总天数(迭代每一天primary
以查看它是否存在于任何次要范围内。
另一个棘手的部分是,如果其中一个次要范围开始/结束于主要范围之外(也许2018-09-25 -> 2018-10-02
)。
我是否错过了一些可以帮助我实现这一目标的记录方法?也许对contains或inside 进行一些巧妙的使用?
谢谢
编辑:这个讨论似乎是主题,我会在我试验过他们的subtract
例子后报告,看看它是否在这里有效。