(Ruby) How do you check whether a range contains a subset of another range?

后端 未结 10 1582
轻奢々
轻奢々 2021-02-05 11:06

If I have two ranges that overlap:

x = 1..10
y = 5..15

When I say:

puts x.include? y 

the output is:

10条回答
  •  死守一世寂寞
    2021-02-05 11:24

    This method can be used to test overlap between multiple ranges in an efficient way:

    def range_overlap?(ranges)
      sorted_ranges = ranges.sort
      sorted_ranges.each_cons(2).each do |r1, r2|
        return true if r2.first <= r1.last
      end
      return false
    end
    
    
    def test(r)
      puts r.inspect, range_overlap?(r)
      puts '================'
      r = r.reverse
      puts r.inspect, range_overlap?(r)
      puts '================'
    end
    
    
    test [[1,9], [10, 33]]
    test [[1,10], [5, 8]]
    test [[1,10], [10, 33]]
    

提交回复
热议问题