2

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

例如:

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

min函数将从5第一列和30第二列返回,给出[5, 30]. 同样,该max函数将从10第一列和35第二列返回,给出[10, 35].

4

3 回答 3

7

您可以在公共位置构造元素数组(即,将逐行二维数组转置为逐列二维数组),然后从每列映射最小值或最大值(或其他任何值):

[a1, a2].transpose.map &:min    #  => [5, 30]
[a1, a2].transpose.map &:max    #  => [10, 35]
于 2013-08-05T21:19:29.790 回答
2
[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]]

鲍罗丁的回答更快。

于 2013-08-05T21:40:29.353 回答
1

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

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

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

p minmax

输出

[[5, 30], [10, 35]]
于 2013-08-05T21:47:52.160 回答