【问题标题】:Concise way to find max/min with potentially nil value [closed]找到可能为零值的最大值/最小值的简明方法[关闭]
【发布时间】:2013-05-12 18:30:11
【问题描述】:

我有两个数组,max_of_row(存储每一行​​的最大值)和 min_of_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]

【问题讨论】:

  • 给我们两个输入数组
  • 好的!你想要的预期输出是什么?上面写的地方。我们没有时间分析您的代码。

标签: ruby coding-style


【解决方案1】:
max_rows = mat.map(&:max)
# => [10, 7, 10]

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

【讨论】:

  • 看来我们在比赛中,没有告诉 OP 提供更多信息给他们答案,猜测的力量。不是很好。我们正在让这种 OP 的习惯变得不好。
  • 也许compact 电话会是一个很好的补充,因为他说可能有nil 值。
  • @squiguy 不,您误解了这一点。 OP 提到 nil 是因为 OP 采用的特定算法,即当它是记录为 max_rows[i]min_cols[j] 的第一个元素时,没有应该与之比较的先前值。在发表评论之前,您需要更加小心。
  • @sawa 哦,好吧。我确实做到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 2022-06-16
  • 2012-05-09
  • 1970-01-01
  • 2014-06-09
  • 2020-03-04
  • 1970-01-01
相关资源
最近更新 更多