Respuestas:
Tu puedes hacer
[5, 10].min
o
[4, 7].max
Vienen del módulo Enumerable , por lo que todo lo que incluya Enumerable
tendrá esos métodos disponibles.
v2.4 presenta los propios Array#min
y Array#max
, que son mucho más rápidos que los métodos de Enumerable porque omiten las llamadas #each
.
@nicholasklick menciona otra opción, Enumerable#minmax
pero esta vez devolviendo una serie de [min, max]
.
[4, 5, 7, 10].minmax
=> [4, 10]
std::max(4, 7)
tiene más "puntuación" que [4, 7].max
?
std::max
se puede importar a tu espacio de nombres, por lo que simplemente se convierte max(4, 7)
. Espere; mirando arriba, veo que ya dije eso.
Puedes usar
[5,10].min
o
[4,7].max
Es un método para matrices.
Todos esos resultados generan basura en un celoso intento de manejar más de dos argumentos. Me gustaría ver cómo funcionan en comparación con el buen ol:
def max (a,b)
a>b ? a : b
end
que es, por cierto, mi respuesta oficial a tu pregunta.
[a,b].max
, pero aún no está claro si es más rápido que la implementación anterior. blog.bigbinary.com/2016/11/17/…
Si necesita encontrar el máximo / mínimo de un hash, puede usar #max_by
o#min_by
people = {'joe' => 21, 'bill' => 35, 'sally' => 24}
people.min_by { |name, age| age } #=> ["joe", 21]
people.max_by { |name, age| age } #=> ["bill", 35]
Además de las respuestas proporcionadas, si desea convertir Enumerable # max en un método max que pueda invocar un número variable o argumentos, como en otros lenguajes de programación, puede 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 de matriz que contenga todos los argumentos proporcionados, o un objeto de matriz vacío si no se proporcionaron argumentos. En el último caso, el método volverá nil
, ya que devuelve llamar a Enumerable # max en un objeto de matriz vacío nil
.
Si desea definir este método en el módulo matemático, esto debería hacer el truco:
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 ( ?:
) . Vea la respuesta de Dave Morse para un método más simple y rápido.
def find_largest_num(nums)
nums.sort[-1]
end