APIdock / Ruby
/
method

each

ruby latest stable - Class: Matrix
each(which = :all)
public

Yields all elements of the matrix, starting with those of the first row, or returns an Enumerator if no block given. Elements can be restricted by passing an argument:

  • :all (default): yields all elements

  • :diagonal: yields only elements on the diagonal

  • :off_diagonal: yields all elements except on the diagonal

  • :lower: yields only elements on or below the diagonal

  • :strict_lower: yields only elements below the diagonal

  • :strict_upper: yields only elements above the diagonal

  • :upper: yields only elements on or above the diagonal

    Matrix[ [1,2], [3,4] ].each { |e| puts e }

    # => prints the numbers 1 to 4
    

    Matrix[ [1,2], [3,4] ].each(:strict_lower).to_a # => [3]

# File lib/matrix.rb, line 390
 def each(which = :all) # :yield: e
 return to_enum :each, which unless block_given?
 last = column_count - 1
 case which
 when :all
 block = Proc.new
 @rows.each do |row|
 row.each(&block)
 end
 when :diagonal
 @rows.each_with_index do |row, row_index|
 yield row.fetch(row_index){return self}
 end
 when :off_diagonal
 @rows.each_with_index do |row, row_index|
 column_count.times do |col_index|
 yield row[col_index] unless row_index == col_index
 end
 end
 when :lower
 @rows.each_with_index do |row, row_index|
 0.upto([row_index, last].min) do |col_index|
 yield row[col_index]
 end
 end
 when :strict_lower
 @rows.each_with_index do |row, row_index|
 [row_index, column_count].min.times do |col_index|
 yield row[col_index]
 end
 end
 when :strict_upper
 @rows.each_with_index do |row, row_index|
 (row_index+1).upto(last) do |col_index|
 yield row[col_index]
 end
 end
 when :upper
 @rows.each_with_index do |row, row_index|
 row_index.upto(last) do |col_index|
 yield row[col_index]
 end
 end
 else
 raise ArgumentError, "expected #{which.inspect} to be one of :all, :diagonal, :off_diagonal, :lower, :strict_lower, :strict_upper or :upper"
 end
 self
 end

AltStyle によって変換されたページ (->オリジナル) /