我有以下代码,它将多维数组中特定行的值加零:
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
答案 0 :(得分:1)
要遵循与其他方法相同的模式,您可以执行以下操作:
def self.zero_column(matrix, col_index)
matrix.each_with_index do |item, row_index|
matrix[row_index][col_index] = 0
end
end
答案 1 :(得分:1)
这符合法案吗?
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
答案 2 :(得分:0)
如果你需要经常处理列,那么我会说使用嵌套数组是一个设计缺陷。嵌套数组几乎没有任何好处,只会让事情变得复杂。你最好有一个平面阵列。与具有平面数组的行一样,操作列更容易。
如果你想要一个3乘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
的信息,那么只需将其指定为该数组的实例变量即可。