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

时间:2014-04-01 23:46:26

标签: ruby arrays multidimensional-array

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

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

3 个答案:

答案 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的信息,那么只需将其指定为该数组的实例变量即可。