Quiero hacer algo simple y sencillo, como min(5,10)
, o Math.max(4,7)
. ¿Existen funciones para ello en Ruby?
Puedes hacer
[5, 10].min
o
[4, 7].max
Provienen del módulo Enumerable, por lo que cualquier cosa que incluya Enumerable
tendrá esos métodos disponibles.
La v2.4 introduce los métodos propios Array#min
y Array#max
, que son mucho más rápidos que los de Enumerable porque omiten la llamada a #each
.
EDITAR
@nicholasklick menciona otra opción, Enumerable#minmax
, pero esta vez devolviendo un array de [min, max]
.
[4, 5, 7, 10].minmax
=> [4, 10]
Puede utilizar
[5,10].min
o
[4,7].max
Es un método para Arrays.
Además de las respuestas proporcionadas, si quieres convertir Enumerable#max en un método max que pueda llamar a un número variable o a argumentos, como en algunos otros lenguajes de programación, podrías escribir:
def max(*values)
values.max
end
Salida:
max(7, 1234, 9, -78, 156)
=> 1234
Esto abusa de las propiedades del operador splat para crear un objeto array que contenga todos los argumentos proporcionados, o un objeto array vacío si no se proporcionan argumentos. En este último caso, el método devolverá nil
, ya que al llamar a Enumerable#max sobre un objeto array vacío se devuelve nil
.
Si quieres definir este método en el módulo Math, esto debería ser suficiente:
module Math
def self.max(*values)
values.max
end
end
Tenga en cuenta que Enumerable.max es, al menos, dos veces más lento en comparación con el operador ternario (?:
). Véase la respuesta de Dave Morse's para un método más sencillo y rápido.