我有一个这样的矩阵:

0 1 0 0 1 0
1 0 1 0 1 0
0 1 0 1 0 0
0 0 1 0 1 1
1 1 0 1 0 0
0 0 0 1 0 0

如何用Ruby定义一个矩阵,然后搜索它?
我想写一个程序,它搜索所有行并返回最大和为“1”的行。

最佳答案

用ruby定义矩阵的快速方法:

Array.new 6, Array.new(6, 0)
# => [
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0]
     ]

上面的代码初始化了一个包含6个项的数组,并将其值默认为第2个参数,即另一个包含6个项且默认值为0的数组。
在其他命令式语言中,您可以使用嵌套循环:
matrix = []
for x in [0,1,2,3,4,5]
  for y in [0,1,2,3,4,5]
    matrix[x] ||= [] # create the row as an empty array
    matrix[x] << y # push the y value to it
  end
end
# matrix is now:
# => [
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5]
     ]

要搜索矩阵并找到和最大的行:
greatest_sum_row_index = 0
greatest_sum = 0

matrix.each_with_index do |row, i|
  # row.inject(:+) is a shortcut to adding each int in the array and returning the sum
  sum = row.inject(:+)
  if sum > greatest_sum
    greatest_sum = sum
    greatest_sum_row_index = i
  end
end

# highest_row is now the index of the greatest sum row
matrix[greatest_sum_row_index] # returns the row with the greatest sum

10-06 05:30
查看更多