在ruby中,给定两个日期范围,我想要表示两个日期范围的交集的范围,或者如果没有交叉则为零.例如:
(Date.new(2011,1,1)..Date.new(2011,1,15)) & (Date.new(2011,1,10)..Date.new(2011,2,15))
=> Mon, 10 Jan 2011..Sat, 15 Jan 2011
Run Code Online (Sandbox Code Playgroud)
编辑:应该说我希望它也适用于DateTime,所以间隔可以缩短到分钟和秒:
(DateTime.new(2011,1,1,22,45)..Date.new(2011,2,15)) & (Date.new(2011,1,1)..Date.new(2011,2,15))
=> Sat, 01 Jan 2011 22:45:00 +0000..Tue, 15 Feb 2011
Run Code Online (Sandbox Code Playgroud) 目前,我有以下间隔:
temp_tuple = [[-25, -14], [-21, -16], [-20, -15], [-10, -7], [-8, -5], [-6, -3], [2, 4], [2, 3], [3, 6], [12, 15], [13, 18], [14, 17], [22, 27], [25, 30], [26, 29]]
Run Code Online (Sandbox Code Playgroud)
按下限按升序排列.我的任务是合并重叠的间隔,以便结果出现:
[-25, -14]
[-10, -3]
[2, 6]
[12, 18]
[22, 30]
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试涉及删除完全在先前间隔内的间隔,例如[-21,-16],其落在[-25,-14]内.但是删除列表中的对象会干扰循环条件.我第二次尝试删除不必要的间隔是:
i = 0
j = 1
while i < len(temp_tuples):
while j < len(temp_tuples):
if temp_tuples[i][1] > temp_tuples[j][1]:
del temp_tuples[j]
j += 1
i += 1
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,这并没有删除所有不必要的间隔.我该怎么办?
假设我在Ruby中有一个数组数组,
[[100,300],
[400,500]]
Run Code Online (Sandbox Code Playgroud)
我正在通过添加连续的CSV数据行来构建.
添加新子阵列时,最好的方法是测试子阵列中两个数字所涵盖的范围是否被任何先前的子阵列覆盖?
换句话说,每个子阵列在上面的示例中包括线性范围(100-300和400-500).如果我想要抛出一个异常,例如,我试图将[499,501]添加到数组中因为会有重叠,我怎么能最好地测试呢?