-1

我试图有效地找到最大的给定两个预先存在的数组。我发现了很多关于找到最大值的线程但我还没有找到任何关于最长的线程。

这是作为构建合并排序的编程练习。

tl;dr:有效地确定哪个更大,并将最大分配给 base_array,将较小分配给 injection_array。

方法 1 - 有效,感觉过于冗长/不优雅

if unsortedB.length > unsortedA.length
  base_array, injection_array = unsortedB, unsortedA
else
  base_array, injection_array = unsortedA, unsortedB
end

方法 2 - 伪代码,当前返回最大的 FIRST ELEMENT

base_array = [unsortedB,unsortedA].max
injection_array = [unsortedB,unsortedA].min

编辑:为清楚起见更新:想要两个任务,而不仅仅是最大的

4

3 回答 3

5

它可以在一行中相当优雅地完成:

injection_array, base_array = [unsortedA, unsortedB].sort_by(&:length)

尽管这是否比替代方案更具可读性仍有待讨论。

于 2013-06-09T19:02:59.790 回答
4

除了maxand之外min,ruby 还具有max_byand min_by,它允许您指定如何比较元素。

minmax_by例如,对于您想要最大值和最小值的常见情况

short, long = [unsortedA,unsortedB].minmax_by(&:length)

但是,我不认为普通的旧 if 语句有什么问题,而且我怀疑它最终会更快。

于 2013-06-09T19:04:35.333 回答
2

三元运算符使它成为单线:

a = [1,2,3,4]
b = [1,2,3,4,5]

base_array, injection_array = a.length > b.length ? [a,b] : [b,a]

p base_array
p injection_array

输出:

[1, 2, 3, 4, 5]
[1, 2, 3, 4]
于 2013-06-09T19:03:25.517 回答