Sha256: 0fc8d2768cc3ffe01d2ad9697d78fba3df81db102b2edda4b964e1af22e6a8bb
Contents?: true
Size: 937 Bytes
Versions: 7
Compression:
Stored size: 937 Bytes
Contents
class Range # Combine ranges. # # (1..2).combine(2..4) #=> [1..4] # (1..2).combine(3..4) #=> [1..2, 3..4] # # TODO: Incorporate end-sentinal inclusion vs. exclusion. # # CREDIT: Trans def combine(*intervals) Range.combine(self, *intervals) end # Combine intervals. # # Range.combine(1..2, 2..4) #=> [1..4] # Range.combine(1..2, 3..4) #=> [1..2, 3..4] # # CREDIT: Trans def self.combine(*intervals) intype = intervals.first.class result = [] intervals = intervals.collect do |i| [i.first, i.last] end intervals.sort.each do |(from, to)| #inject([]) do |result, if result.empty? or from > result.last[1] result << [from, to] elsif to > result.last[1] result.last[1] = to end #result end if intype <= Range result.collect{ |i| ((i.first)..(i.last)) } else result end end end
Version data entries
7 entries across 7 versions & 2 rubygems