给定两个长度相等的Fixnum
数组,是否有一种Ruby方法可以生成一个在每个索引处保存最大值或最小值的数组?
例如:
a1 = [ 10, 30 ]
a2 = [ 5, 35 ]
min
函数将从第一列返回5
,从第二列返回30
,得到[5, 30]
。同样,max
函数将从第一列返回10
,从第二列返回35
,得到[10, 35]
。
答案 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]]