Ruby有效地确定了2个数组中最大(最长)的数组

时间:2013-06-09 18:57:17

标签: ruby arrays sorting

我正在努力有效地找到最大的两个预先存在的数组。我发现很多线程都找到了最大的,但我没有找到任何具体的最长的。

这是构建mergesort的编程练习。

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
为了清晰起见,

编辑更新:想要两个作业,而不仅仅是最大的

3 个答案:

答案 0 :(得分:5)

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

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

虽然这是否比其他选择更具可读性仍然可供讨论。

答案 1 :(得分:4)

maxmin之外,ruby还有max_bymin_by,可让您指定元素的比较方式。

对于您希望最大值和最小值都为minmax_by的常见情况,例如

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

但是,我不认为普通的旧if语句有多大错,我怀疑它最终会更快。

答案 2 :(得分: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]