2016-03-15 62 views
2

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

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

有趣的问题,但我认为你应该写“和”,而不是“或”。 –

+0

你在评论中说数组不包含零。这很重要,因此应该在问题中提到。我建议你编辑来补充一下,但要清楚它是一个编辑(例如,“编辑:我忘了提及该数组不包含零。”)。 –

+0

[请不要在文本中加入“编辑”或“更新”标签。](http://meta.stackoverflow.com/a/255685/128421)如果我们需要知道的话,我们可以知道发生了什么变化。 –

回答

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 

你甚至可以包起来的方法,如果你想,也许在数组类。

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

注意这些方法已添加到Ruby 2.3中的Numeric –

0

这里是做到这一点的另一途径 - 分隔阵列分成正和负子阵列,然后从各个这两个阵列的发现最大/最小值。

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

或者,也可以如下,办其中数组进行排序,并在一对被发现,其中对第一元素是负的,第二元件是正的,从而使我们最大负的值和MIN正值。

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

OP正在查找“正极分”(1)和“负极大”(-1)。还要注意'0'既不是'正数?'也不是'负数?' – Stefan

+0

@Stefan感谢您的评论。已更新答案 –

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

@CarySwoveland在数组中添加一个零会导致[-1,0](因为1.0/0是无穷大)。这可能或不可能是OP想要的。 – steenslag

+0

@CarySwoveland阵列是零免费的..所以这个作品也 –

+0

这只适用于如果数组包含至少一个负数和一个正数。 – Stefan

相关问题