我正在尝试为应用程序执行一些停机计算。我所拥有的是一系列巨大的哈希值,表明当应用程序的不同部分出现故障时。哈希包括开始时间和结束时间。问题是这些停机时间中的一些可能会重叠。如何查看哈希数组并找到重叠的时间间隔。
times = [{"timefrom"=>1461693247, "timeto"=>1461693307},
{"timefrom"=>1462363987, "timeto"=>1462364607},
{"timefrom"=>1462364037, "timeto"=>1462366037}]
例如,给定上面的数组,times[1]
和times[2]
重叠。理想情况下,我想要做的是将它们合并,以便它们形成一个长时间停机。 I.E.
times[1] = { "timefrom" => times[1]["timefrom"], "timeto" => times[2]["timeto"] }
答案 0 :(得分:1)
我了解g
的{{1}}(哈希)元素按times
排序。
g["timefrom"]
行间距显示了def combine_times(times)
times[1..-1].each_with_object([times.first]) do |g,a|
if g["timefrom"] < a.last["timeto"]
a[-1]["timeto"] = [ a[-1]["timeto"], g["timeto"] ].max
else
a << g
end
end
end
times = [{"timefrom"=>1461693247, "timeto"=>1461693307},
{"timefrom"=>1462363987, "timeto"=>1462364607},
{"timefrom"=>1462364037, "timeto"=>1462366037}]
的元素应如何分组。
times
另一个例子:
combine_times(times)
#=> [{"timefrom"=>1461693247, "timeto"=>1461693307}, (times[0])
# {"timefrom"=>1462363987, "timeto"=>1462366037}] (combines times[1..2])