Скажем, у вас есть следующий хеш 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]
- нет.
Как это лучше всего реализовать синтаксически?