如何在数组中找到最大负数和最小正数

时间:2016-03-15 15:24:01

标签: ruby

是否有一些方法可以在数组中找到最大负数和最小正数? 数组不包含零

[-1,5,-4,6,1,8,-3].max_negative # => -1
[-1,5,-4,6,1,8,-3].min_positive # => 1

4 个答案:

答案 0 :(得分:6)

[-1,5,-4,6,1,8,-3].select(&:negative?).max
[-1,5,-4,6,1,8,-3].select(&:positive?).min

答案 1 :(得分:5)

我认为没有内置的解决方案。但你可以非常简单地实现这一点。

[-1,5,-4,6,1,8,-3].select{|n| n < 0}.max # => -1
[-1,5,-4,6,1,8,-3].select{|n| n >= 0}.min # => 1

如果需要,你甚至可以将它们包装在一个方法中,也许在数组类中。

答案 2 :(得分:4)

neg_max, pos_min =  [-1,5,-4,6,1,8,-3].minmax_by{|el| 1.0/el}

答案 3 :(得分:0)

这是另外一种方法 - 将数组分成正负子阵列,然后从这两个数组中找出最大/最小值。

positives, negatives = arr.partition(&:positive?)
p positives.min
#=> 1
p negatives.max
#=> -1

或者,您可以执行以下操作,其中数组已排序并且找到一对,其中第一个元素对为负,第二个元素为正,从而为我们提供最大负值和最小正值的值。

max_neg, min_pos = arr.sort.each_slice(2)
                           .select {|i, j| i.negative? and j.positive?}.flatten