使用Ruby确定矩阵中左上角到右下角的值的总和?

时间:2015-09-29 20:25:35

标签: ruby matrix

我有一个不确定行和&的方阵。列长度​​(假设行和列等于正方形)。

我绘制了一个示例矩阵如下:

matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
 ]

我的目标是从对角线值的左上角到右下角得到一个总和。

显然在这个例子中,这就是我所需要的:

diagsum = matrix[0][0]+matrix[1][1]+matrix[2][2]
#=>  15

我看到每个行的增量为+1的模式&矩阵中的列参数,所以为我的不确定长度矩阵开发的代码(作为我的方法diagsum的参数提供)最好需要在我的矩阵参数上实现某种row_count方法。

3 个答案:

答案 0 :(得分:3)

如果

arr = [[1,2,3],
       [4,5,6],
       [7,8,9]]

然后:

require 'matrix'
Matrix[*arr].trace
  #=> 15

答案 1 :(得分:1)

这将对角线值求和。

matrix = []
matrix[0] = [1,2,3]
matrix[1] = [4,5,6]
matrix[2] = [7,8,9]

def diagsum(mat)
  sum = 0
  mat.each_with_index { |row,i| sum += row[i]  }
  sum
end

puts (diagsum matrix) # 15

答案 2 :(得分:0)

  1. 不清楚x是什么。
  2. 但假设它是列数/行数,则为0..x,而索引仅上升到x - 1。您应该将其更改为0...x
  3. 您正在分配变量i,其范围仅在块中。
  4. 您只使用i一次,可能意图与行或列对应,但不能同时使用两者。
  5. 您正在添加索引而不是相应的元素。
  6. each将返回接收器,无论你在块中得到什么。
  7. 无论你得到什么,
  8. puts都会返回nil