¿Cómo se encuentra un mínimo/máximo con Ruby?
Quiero hacer algo simple y sencillo, como min(5,10)
, o Math.max(4,7)
. ¿Existen funciones para ello en Ruby?
398
3
Quiero hacer algo simple y sencillo, como min(5,10)
, o Math.max(4,7)
. ¿Existen funciones para ello en Ruby?
Puedes hacer
o
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
yArray#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]
.Puede utilizar
o
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:
Salida:
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 devuelvenil
.Si quieres definir este método en el módulo Math, esto debería ser suficiente:
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.