Ruby 2D数组转置而不使用内置方法

时间:2018-02-18 17:18:16

标签: ruby multidimensional-array 2d

我已经坚持了一段时间。作为一项任务,我需要在不使用内置转置方法的情况下转置此2D数组,而无需更改函数名称/输出。我觉得它应该比我做出来更容易......

class Image 

def transpose
     @array.each_with_index do |row, row_index|
      row.each_with_index do |column, col_index|
        @array[row_index] = @array[col_index]
      end
    end 
  end 
end

image_transpose = Image.new([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])

print "Image transpose"
puts

image_transpose.output_image

puts "-----" 

image_transpose.transpose
image_transpose.output_image

puts "-----"

2 个答案:

答案 0 :(得分:2)

尝试以下代码:

class Image 

  def initialize(array)
    @array = array
  end

  def transpose
    _array = @array.dup
    @array = [].tap do |a|
      _array.size.times{|t| a << [] }
    end
    _array.each_with_index do |row, row_index|
      row.each_with_index do |column, col_index|
        @array[row_index][col_index] = _array[col_index][row_index]
      end
    end 
  end


end

image_transpose = Image.new([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
image_transpose.transpose

答案 1 :(得分:2)

我建议您使用以下方法替换方法transpose

def transpose
  @array.first.zip(*@array[1..-1])
end

对(未定义)方法output_input的需求并不明显。当然,您还需要一个initialize方法来为实例变量@array分配值。

我假设您被要求改进方法transpose的实施;否则就没有理由不能使用Ruby的内置transpose方法。