是否有一些方法可以在数组中找到最大负数和最小正数? 数组不包含零
[-1,5,-4,6,1,8,-3].max_negative # => -1
[-1,5,-4,6,1,8,-3].min_positive # => 1
答案 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