找到具有潜在零值的最大值/最小值的简明方法

时间:2013-05-12 18:30:12

标签: ruby coding-style

我有两个数组,max_of_row(存储每行中的最大值)和min_of_col(存储每个col中的最小值)。

我将这些初始化为max_of_row = []和min_of_col = []。

这就是我现在填写它的方式:

  max_rows = []
  min_cols = []
  for i in 0..mat.length-1
    for j in 0..mat[0].length-1
      val = mat[i][j]
      max_rows[i] = [max_rows[i] || val, val].max
      min_cols[j] = [min_cols[j] || val, val].min
    end
  end

我正在使用它看起来很奇怪:[max_rows [i] || val,val] .max。有没有更好的方法呢?

我之前:

  if max_rows[i].nil? || max_rows[i] < val
    max_rows[i] = val
  end
  if min_rows[j].nil? || min_cols[j] > val
    min_cols[j] = val
  end

(我认为)更糟糕,因为它更长。我是对的,我应该尝试改变这些吗?如果是这样,有没有更好看的方式呢?

修改

以下是数组的示例:

mat =  
  [[2, 5, 10], 
   [3, 4, 7], 
   [6, 10, 9]] 

修改

以下是预期值:

max_of_row = [10, 7, 10]
min_of_col = [2, 4, 7]

1 个答案:

答案 0 :(得分:1)

max_rows = mat.map(&:max)
# => [10, 7, 10]

min_cols = mat.transpose.map(&:min)
# => [2, 4, 7]