我已经被这个问题困扰了一段时间了。作为一项作业,我需要转置这个二维数组,而不使用内置的转置方法,并且不更改函数名称/输出。我觉得这应该比我想象的要容易得多......
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 "-----"
编辑:我很高兴六年后我仍然收到对此的回复。让他们继续来!
尝试下面的代码:
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
我建议您将方法
transpose
替换为以下方法。
def transpose
@array.first.zip(*@array[1..-1])
end
对(未定义)方法
output_input
的需求并不明显。当然,您还需要一个 initialize
方法来为实例变量 @array
赋值。
我假设您被要求改进该方法的实施
transpose
;否则就没有理由规定不能使用 Ruby 内置的 transpose
方法。
尝试(使用
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
。这段代码的目的是,在没有内置方法的情况下执行转置。