Method: Range#downto

Defined in:
lib/combinatorics/extensions/range.rb

#downto(other) {|subrange| ... } ⇒ Enumerator

Iterates over every sub-range down to the other range.

Examples:

(2..7).downto(1..5).to_a
# => [2..7, 2..6, 2..5, 1..7, 1..6, 1..5]

Parameters:

  • other (Range)

    The lower bounding range.

Yields:

  • (subrange)

    The given block will be passed every sub-range between the two ranges.

Yield Parameters:

  • subrange (Range)

    A sub-range bounded by the beginning of the other range and the ending of the range.

Returns:

  • (Enumerator)

    If no block is given, an enumerator object will be returned.

Since:

  • 0.2.0



85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/combinatorics/extensions/range.rb', line 85

def downto(other)
  return enum_for(:downto,other) unless block_given?

  unless other.kind_of?(Range)
    raise(TypeError,"bad value for range",caller)
  end

  self.first.downto(other.first) do |start|
    self.last.downto(other.last) do |stop|
      yield start..stop
    end
  end
end