Como se encontra um min / max com Ruby?

Quero fazer algo simples e directo, como min(5,10), ou Math.max(4,7). Existem funções para este efeito em Ruby?

Solução

Pode fazer

[5, 10].min

ou

[4, 7].max

Vêm do Módulo Inumerável, pelo que qualquer coisa que inclua Enumerável terá esses métodos disponíveis.

v2.4 introduz os próprios métodos "Array#min" e "Array#max", que são muito mais rápidos que os métodos Enumerable's porque saltam a chamada "cada um".

**EDIT***

@nicholasklick menciona outra opção, Enumerable#minmax, mas desta vez devolvendo um conjunto de [min, max].

[4, 5, 7, 10].minmax
=> [4, 10]
Comentários (13)

Pode usar

[5,10].min 

ou

[4,7].max

It's um método para Arrays.

Comentários (2)

Além das respostas fornecidas, se quiser converter Enumerable#max num método máximo que pode chamar um número variável ou argumentos, como em algumas outras linguagens de programação, poderia escrever:

def max(*values)
 values.max
end

Produção:

max(7, 1234, 9, -78, 156)
=> 1234

Isto abusa das propriedades do operador splat para criar um objecto de matriz contendo todos os argumentos fornecidos, ou um objecto de matriz vazio se não forem fornecidos argumentos. Neste último caso, o método retornará 'nada', uma vez que chamar Enumerable#max sobre um objecto de matriz vazia retorna 'nada'.

Se quiser definir este método no módulo Matemática, isto deve fazer o truque:

module Math
 def self.max(*values)
  values.max
 end
end

Note-se que Enumerable.max é, pelo menos, duas vezes mais lento em comparação com o operador ternário (?:). Ver Dave Morse's answer para um método mais simples e mais rápido.

Comentários (1)