Réponses:
Tu peux faire
[5, 10].min
ou
[4, 7].max
Ils proviennent du module Enumerable , donc tout ce qui inclut Enumerable
aura ces méthodes disponibles.
La v2.4 introduit les méthodes propres Array#min
et Array#max
, qui sont bien plus rapides que les méthodes d'Enumerable car elles ignorent les appels #each
.
@nicholasklick mentionne une autre option, Enumerable#minmax
mais cette fois en retournant un tableau de [min, max]
.
[4, 5, 7, 10].minmax
=> [4, 10]
std::max(4, 7)
a plus de "ponctuation" que [4, 7].max
?
std::max
peut être importé dans votre espace de noms pour qu'il devienne juste max(4, 7)
. Attendre; en regardant ci-dessus, je vois que je l'ai déjà dit.
Vous pouvez utiliser
[5,10].min
ou
[4,7].max
C'est une méthode pour les tableaux.
Tous ces résultats génèrent des ordures dans une tentative ardente de gérer plus de deux arguments. Je serais curieux de voir comment ils fonctionnent par rapport aux bons vieux:
def max (a,b)
a>b ? a : b
end
qui est d'ailleurs ma réponse officielle à votre question.
[a,b].max
, mais il n'est toujours pas clair si c'est plus rapide que l'implémentation ci-dessus. blog.bigbinary.com/2016/11/17/…
Si vous avez besoin de trouver le max / min d'un hachage, vous pouvez utiliser #max_by
ou#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]
En plus des réponses fournies, si vous souhaitez convertir Enumerable # max en une méthode max pouvant appeler un nombre variable ou des arguments, comme dans certains autres langages de programmation, vous pouvez écrire:
def max(*values)
values.max
end
Production:
max(7, 1234, 9, -78, 156)
=> 1234
Cela abuse des propriétés de l'opérateur splat pour créer un objet tableau contenant tous les arguments fournis ou un objet tableau vide si aucun argument n'a été fourni. Dans ce dernier cas, la méthode retournera nil
, car l'appel de Enumerable # max sur un objet tableau vide retourne nil
.
Si vous souhaitez définir cette méthode sur le module Math, cela devrait faire l'affaire:
module Math
def self.max(*values)
values.max
end
end
Notez que Enumerable.max est, au moins, deux fois plus lent que l'opérateur ternaire ( ?:
) . Voir la réponse de Dave Morse pour une méthode plus simple et plus rapide.
def find_largest_num(nums)
nums.sort[-1]
end