我有以下代码,它将零添加到多维数组中特定行的值:
def self.zero_row(matrix, row_index)
matrix[row_index].each_with_index do |item, index|
matrix[row_index][index] = 0
end
return matrix
end
我想知道我将如何使给定特定column_index的所有值都归零。
def self.zero_column(matrix, col_index)
#..
end
要遵循与其他方法相同的模式,您可以执行以下操作:
def self.zero_column(matrix, col_index)
matrix.each_with_index do |item, row_index|
matrix[row_index][col_index] = 0
end
end
这符合要求吗?
def self.zero_column(matrix, col_index)
matrix = matrix.transpose
matrix[col_index].map!{0}
matrix.transpose
end
同样,您可以简化zero_row
方法
def self.zero_row(matrix, row_index)
matrix[row_index].map!{0}
matrix
end
如果您需要经常处理列,那么我会说使用嵌套数组是一个设计缺陷。嵌套数组几乎没有任何好处,只会让事情变得复杂。你最好有一个平面数组。与使用平面数组的行一样操作列要容易得多。
如果你想要一个 3 x 2 的矩阵,那么你可以简单地将其初始化为长度为 3 * 2 的数组,如下所示:
a = [1, 2, 3, 4, 5, 6]
然后,您可以分别引用第二列(索引 1)或行:
a.select.with_index{|_, i| i % 2 == 1} # => [2, 4, 6]
a.select.with_index{|_, i| i / 2 == 1} # => [3, 4]
将该列或行的所有值重写为 0
将分别是:
a.each_index{|i| a[i] = 0 if i % 2 == 1} # => a: [1, 0, 3, 0, 5, 0]
或
a.each_index{|i| a[i] = 0 if i / 2 == 1} # => a: [1, 2, 0, 0, 5, 6]
在列上的操作和行上的操作之间切换是%
和/
之间的切换;你可以看到对称性/一致性。如果您需要将有关列长度的信息2
保存在数组中,则只需将其分配为该数组的实例变量即可。