给定两个Fixnum
长度相等的数组,是否有一种 Ruby 方法可以生成一个数组,其中包含每个索引处的最大值或最小值?
例如:
a1 = [ 10, 30 ]
a2 = [ 5, 35 ]
该min
函数将从5
第一列和30
第二列返回,给出[5, 30]
. 同样,该max
函数将从10
第一列和35
第二列返回,给出[10, 35]
.
您可以在公共位置构造元素数组(即,将逐行二维数组转置为逐列二维数组),然后从每列映射最小值或最大值(或其他任何值):
[a1, a2].transpose.map &:min # => [5, 30]
[a1, a2].transpose.map &:max # => [10, 35]
[a1, a2].transpose.map &: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]]
鲍罗丁的回答更快。
如果最大的是第一个,只需交换每一对:
a1 = [ 10, 30 ]
a2 = [ 5, 35 ]
minmax = a1.zip(a2).map { |pair| pair.sort }
p minmax
输出
[[5, 30], [10, 35]]