设置多维数组中列的所有值



我有以下代码,它将零添加到多维数组中特定行的值:

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保存在数组中,则只需将其分配为该数组的实例变量即可。

相关内容

  • 没有找到相关文章

最新更新