列出两个数组每个位置的元素的最大值或最小值

时间:2013-08-05 21:11:02

标签: ruby arrays

给定两个长度相等的Fixnum数组,是否有一种Ruby方法可以生成一个在每个索引处保存最大值或最小值的数组?

例如:

a1 = [ 10, 30 ]
a2 = [ 5,  35 ]

min函数将从第一列返回5,从第二列返回30,得到[5, 30]。同样,max函数将从第一列返回10,从第二列返回35,得到[10, 35]

3 个答案:

答案 0 :(得分:8)

您可以在公共位置构建元素数组(即,transpose行逐行2D数组到列式2D数组中),然后将min或max(或其他任何)值映射出去每栏:

[a1, a2].transpose.map &:min    #  => [5, 30]
[a1, a2].transpose.map &:max    #  => [10, 35]

答案 1 :(得分:2)

[a1, a2].transpose.map &:minmax

给定一对较大的数组,它会在每个索引处存储minmax。

a1 = [ 10, 30, 8, 15 ]
a2 = [ 17, 23, 5,  35 ]

p [a1, a2].transpose.map &:minmax   #  => [[10, 17], [23, 30], [5, 8], [15, 35]]

鲍罗丁的答案更快。

答案 2 :(得分:2)

如果最大的是第一对,只需交换每一对:

a1 = [ 10, 30 ]
a2 = [ 5,  35 ]

minmax = a1.zip(a2).map { |pair| pair.sort }

p minmax

<强>输出

[[5, 30], [10, 35]]