我正在努力有效地找到最大的两个预先存在的数组。我发现很多线程都找到了最大的值,但我没有找到任何具体的最长的。
这是构建mergesort的编程练习。
tl; dr:有效地确定哪个更大,并将最大值分配给base_array,并将更小的值分配给injection_array。
if unsortedB.length > unsortedA.length
base_array, injection_array = unsortedB, unsortedA
else
base_array, injection_array = unsortedA, unsortedB
end
base_array = [unsortedB,unsortedA].max
injection_array = [unsortedB,unsortedA].min
为了清晰起见,编辑更新:想要两个作业,而不仅仅是最大的
答案 0 :(得分:5)
可以在一行中相当优雅地完成:
injection_array, base_array = [unsortedA, unsortedB].sort_by(&:length)
虽然这是否比其他选择更具可读性仍然可供讨论。
答案 1 :(得分:4)
除max
和min
之外,ruby还有max_by
和min_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]