Ich möchte etwas Einfaches und Geradliniges machen, wie min(5,10)
, oder Math.max(4,7)
. Gibt es in Ruby Funktionen für diesen Zweck?
Das können Sie tun
[5, 10].min
oder
[4, 7].max
Sie stammen aus dem Enumerable-Modul, so dass alles, was Enumerable
enthält, diese Methoden zur Verfügung hat.
v2.4 führt eigene Array#min
und Array#max
ein, die viel schneller sind als die Enumerable-Methoden, weil sie den Aufruf von #each
überspringen.
EDIT
@nicholasklick erwähnt eine weitere Option, Enumerable#minmax
, aber dieses Mal wird ein Array von [min, max]
zurückgegeben.
[4, 5, 7, 10].minmax
=> [4, 10]
Sie können verwenden
[5,10].min
oder
[4,7].max
Es ist eine Methode für Arrays.
Wenn Sie zusätzlich zu den gegebenen Antworten Enumerable#max in eine max-Methode umwandeln wollen, die eine variable Anzahl oder Argumente aufrufen kann, wie in einigen anderen Programmiersprachen, könnten Sie schreiben:
def max(*values)
values.max
end
Ausgabe:
max(7, 1234, 9, -78, 156)
=> 1234
Diese Methode missbraucht die Eigenschaften des Splat-Operators, um ein Array-Objekt zu erzeugen, das alle angegebenen Argumente enthält, oder ein leeres Array-Objekt, wenn keine Argumente angegeben wurden. In letzterem Fall gibt die Methode nil
zurück, da der Aufruf von Enumerable#max auf einem leeren Array-Objekt nil
zurückgibt.
Wenn Sie diese Methode für das Math-Modul definieren wollen, sollte dies den Zweck erfüllen:
module Math
def self.max(*values)
values.max
end
end
Beachten Sie, dass Enumerable.max mindestens zwei Mal langsamer ist als der ternäre Operator (?:
). Siehe Dave Morse's Antwort für eine einfachere und schnellere Methode.