Ruby参数错误,尝试将矩阵转置90度

Ruby参数错误,尝试将矩阵转置90度,ruby,argument-error,Ruby,Argument Error,在下面的代码中,我试图将矩阵变换90度。但是当我运行代码时,我得到一个参数错误: 我不明白为什么会发生这种情况,因为我在方法定义中显然有一个参数。如果您能提供任何有关此错误发生原因的信息,我将不胜感激。谢谢 irb(main):001:0> matrix1 = [ irb(main):002:1* [1, 5, 8], irb(main):003:1* [4, 7, 2], irb(main):004:1* [3, 9, 6] irb(main):005:1> ] =&g

在下面的代码中,我试图将矩阵变换90度。但是当我运行代码时,我得到一个参数错误:

我不明白为什么会发生这种情况,因为我在方法定义中显然有一个参数。如果您能提供任何有关此错误发生原因的信息,我将不胜感激。谢谢

irb(main):001:0> matrix1 = [
irb(main):002:1*   [1, 5, 8],
irb(main):003:1*   [4, 7, 2],
irb(main):004:1*   [3, 9, 6]
irb(main):005:1> ]
=> [[1, 5, 8], [4, 7, 2], [3, 9, 6]]
irb(main):006:0> def rotate90(matrix_input)
irb(main):007:1>   input_column = 0
irb(main):008:1>   input_row = 0
irb(main):009:1>   return_column = matrix_input.size - 1
irb(main):010:1>   matrix2 = []
irb(main):011:1>   mat1_size = matrix_input.size -1 
irb(main):012:1>   loop do
irb(main):013:2*     loop do
irb(main):014:3*       matrix2[input_column][return_column] = matrix_input[input_row][input_column]
irb(main):015:3>       input_column += 1
irb(main):016:3>       break if input_column >= matrix_input[0].size - 1
irb(main):017:3>     end
irb(main):018:2>     input_row += 1
irb(main):019:2>     input_column = 0
irb(main):020:2>     return_column -= 1
irb(main):021:2>     break if input_row >= mat1_size
irb(main):022:2>   end
irb(main):023:1>   matrix2
irb(main):024:1> end
=> :rotate90
irb(main):025:0> rotate90(matrix1)
ArgumentError: wrong number of arguments (given 1, expected 0)
    from (irb):11:in `length'
    from (irb):11:in `rotate90'
    from (irb):25
    from /usr/bin/irb:11:in `<main>'

如果我正确理解了您想要完成的任务,那么可以按如下方式完成

def rotate90(arr)
  arr.map(&:reverse).transpose
end
注意

arr.map(&:reverse)
  #=> [[8, 5, 1],
  #    [2, 7, 4],
  #    [6, 9, 3]] 
arr.map&:reverse大致是

arr.map { |a| a.reverse }
还请注意

4.times.reduce(arr) { |a,_| rotate90(a) }
  #=> [[1, 5, 8],
  #    [4, 7, 2],
  #    [3, 9, 6]] 
返回原始数组

我从评论中看到OP忘记提到Arraytranspose或Arrayreverse都不能使用。在这种情况下,我们可以采取不同的方法

请注意,如果arr_new是正在构造的阵列,则:

arr_new[i][j] = arr[arr.size-1-j][i]

对于所有0,您的错误答案如下:

mat1_size = matrix_input.size -1
-1是负数,Ruby将其解释为:

mat1_size = matrix_input.size(-1)
解决办法当然是:

mat1_size = matrix_input.size - 1

然而,您的程序仍然存在一些错误,但这是您最初问题的答案。

什么是作为rotate90的参数传递的。抱歉-我使用的是这个矩阵:matrix1=[[1,5,8],[4,7,2],[3,9,6]]rotate90matrix1的期望返回值是多少,在您的注释中给出了matrix1?您应该通过编辑将注释和所需的返回值合并到问题中。错误消息表示,在代码中的某个点,您正在向不需要参数的方法传递参数。错误消息还会告诉您发生这种情况的确切位置。由于您没有告诉我们发生错误的确切位置,所以我们只能说这个问题。特别是,错误消息指向第7行,这显然不是错误所在的位置,而第26行甚至不存在。因此,您发布的错误消息似乎不属于您发布的代码,因为它指向您发布的代码中甚至不存在的行。只要我们甚至没有匹配的错误消息和代码,我们就绝对无法为您提供帮助。应该提到的是,该练习禁止使用.transpose和.reverseThanks,我自己永远不会想到这一点。我能够修复所有其他错误。
mat1_size = matrix_input.size -1
mat1_size = matrix_input.size(-1)
mat1_size = matrix_input.size - 1