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

问题描述 投票:0回答:3

我已经被这个问题困扰了一段时间了。作为一项作业,我需要转置这个二维数组,而不使用内置的转置方法,并且不更改函数名称/输出。我觉得这应该比我想象的要容易得多......

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 "-----"

编辑:我很高兴六年后我仍然收到对此的回复。让他们继续来!

ruby multidimensional-array 2d
3个回答
3
投票

尝试下面的代码:

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

3
投票

我建议您将方法

transpose
替换为以下方法。

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

对(未定义)方法

output_input
的需求并不明显。当然,您还需要一个
initialize
方法来为实例变量
@array
赋值。

我假设您被要求改进该方法的实施

transpose
;否则就没有理由规定不能使用 Ruby 内置的
transpose
方法。


0
投票

尝试(使用

while
循环):

def transpose(matrix)
  transpose = []
  i = 0

  while i < matrix.size
   transpose[i] = []
   j = 0
   while j < matrix.size
     transpose[i] << matrix[j][i]
     j += 1
   end
   i += 1
  end

  transpose
end

显然根据问题需要

initialize
。这段代码的目的是,在没有内置方法的情况下执行转置。

© www.soinside.com 2019 - 2024. All rights reserved.