为什么我的对角矩阵计算器没有返回总数?

时间:2016-05-07 04:40:50

标签: ruby

我的方法应该采用一组子数组,找到第一个数组的第一个值的总和,第二个数组的第二个值,第三个数组的第三个值,依此类推。输入和预期结果的一些示例如下:

exampleArray = [
  [1, 0, 0, 0],
  [0, 1, 0, 0],
  [0, 0, 1, 0],
  [0, 0, 0, 1]
]
diagonalSum(exampleArray) # => 4

exampleArray = [
  [1, 0, 0, 0, 0],
  [0, 1, 0, 0, 0],
  [0, 0, 1, 0, 0],
  [0, 0, 0, 1, 0],
  [0, 0, 0, 0, 1]
]
diagonalSum(exampleArray) # => 5

我写了这个:

def diagonalSum(matrix)
  total = 0
  counter = 0
  while matrix.length <= counter + 1 do
    total += matrix[counter][counter]
    counter += 1
  end 
  total
end

然后返回0

2 个答案:

答案 0 :(得分:0)

最简单的方法是将数组转换为矩阵并应用Matrix#trace

require 'matrix'

arr = [[1, 0, 0, 7],
       [0, 2, 0, 0],
       [0, 0, 3, 0],
       [8, 0, 0, 4]]

Matrix[*arr].trace
  #=> 10

答案 1 :(得分:0)

根据你提供的代码,其中输入是一个数组数组,我可以给你的第一个建议是,在Ruby中你必须避免使用for/while循环并使用迭代器,如{{ 1}}代替(基于此Ruby style guide以及@tadman和@Yu Hao的建议)。

each with index迭代器使用当前迭代数组及其索引位置的Ruby块,因此您不需要定义自己的索引变量并在每次迭代中更新它。

将此代码应用于您的代码将产生以下结果:

each/each_with_index

另请注意,Ruby中的约定是在snake_case中编写变量和方法名称(根据以前的样式指南)。