在ruby数组中查找并展平重叠的时间间隔

时间:2016-07-19 19:12:01

标签: arrays ruby algorithm time

我正在尝试为应用程序执行一些停机计算。我所拥有的是一系列巨大的哈希值,表明当应用程序的不同部分出现故障时。哈希包括开始时间和结束时间。问题是这些停机时间中的一些可能会重叠。如何查看哈希数组并找到重叠的时间间隔。

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"] }

1 个答案:

答案 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])