【发布时间】:2014-01-30 15:36:55
【问题描述】:
假设你有以下 Ruby 哈希,
hash = {:a => [[1, 100..300],
[2, 200..300]],
:b => [[1, 100..300],
[2, 301..400]]
}
还有以下功能,
def overlaps?(range, range2)
range.include?(range2.begin) || range2.include?(range.begin)
end
def any_overlaps?(ranges)
# This calls to_proc on the symbol object; it's syntactically equivalent to
# ranges.sort_by {|r| r.begin}
ranges.sort_by(&:begin).each_cons(2).any? do |r1, r2|
overlaps?(r1, r2)
end
end
对于hash 中的每个键,您希望测试任何范围是否与其他范围重叠。在上面的hash 中,我希望hash[:a] 会让我生气,而hash[:b] 不会。
如何在语法上最好地实现?
【问题讨论】:
-
我喜欢你的解决方案,没有什么要补充的。除了使用一些类似的方法
overlaps?,如果希望使代码更紧凑。