Method: RangeOperations::Array.subtract
- Defined in:
- lib/range_operations/array.rb
.subtract(range, subranges) ⇒ Object
Returns an array of ranges resulting from removing from range any parts overlapped by any of subranges.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/range_operations/array.rb', line 31 def self.subtract(range, subranges) simple = simplify(subranges) [].tap do |acc| start = range.begin simple.each do |sr| next if sr.end < start if sr.begin > start finish = [sr.begin, range.end].min acc << (start .. finish) end start = sr.end break if start > range.end end if start < range.end acc << (start .. range.end) end end end |