Antworten:
Du kannst tun
[5, 10].min
oder
[4, 7].max
Sie kommen aus dem Enumerable-Modul , also alles, was dazu gehörtEnumerable
alle enthaltenen Methoden diese Methoden verfügbar sind.
v2.4 führt eigene Array#min
und ein Array#max
, die viel schneller sind als die Methoden von Enumerable, da sie das Aufrufen überspringen#each
.
@nicholasklick erwähnt eine andere Option, Enumerable#minmax
gibt aber diesmal ein Array von zurück [min, max]
.
[4, 5, 7, 10].minmax
=> [4, 10]
std::max(4, 7)
hat mehr "Interpunktion" als [4, 7].max
?
std::max
dies in Ihren Namespace importiert werden kann, so dass es einfach wird max(4, 7)
. Warten; Wenn ich nach oben schaue, sehe ich, dass ich das schon gesagt habe.
Sie können verwenden
[5,10].min
oder
[4,7].max
Es ist eine Methode für Arrays.
All diese Ergebnisse erzeugen Müll in einem eifrigen Versuch, mehr als zwei Argumente zu verarbeiten. Ich wäre gespannt, wie sie sich im Vergleich zu guten alten Leuten verhalten:
def max (a,b)
a>b ? a : b
end
Das ist übrigens meine offizielle Antwort auf Ihre Frage.
[a,b].max
, aber es ist immer noch nicht klar, ob es schneller als die obige Implementierung ist. blog.bigbinary.com/2016/11/17/…
Wenn Sie das Maximum / Min eines Hashs ermitteln müssen, können Sie #max_by
oder verwenden#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]
Wenn Sie zusätzlich zu den bereitgestellten Antworten Enumerable # max in eine max-Methode konvertieren möchten , die wie in einigen anderen Programmiersprachen eine variable Nummer oder Argumente aufrufen kann, können Sie Folgendes schreiben:
def max(*values)
values.max
end
Ausgabe:
max(7, 1234, 9, -78, 156)
=> 1234
Dies missbraucht die Eigenschaften des Splat-Operators, um ein Array-Objekt zu erstellen, das alle angegebenen Argumente enthält, oder ein leeres Array-Objekt, wenn keine Argumente angegeben wurden. Im letzteren Fall wird die Methode zurückgegeben nil
, da der Aufruf von Enumerable # max für ein leeres Array-Objekt zurückgegeben wird nil
.
Wenn Sie diese Methode im Math-Modul definieren möchten, sollte dies den Trick tun:
module Math
def self.max(*values)
values.max
end
end
Beachten Sie, dass Enumerable.max im Vergleich zum ternären Operator ( ?:
) mindestens zweimal langsamer ist . In der Antwort von Dave Morse finden Sie eine einfachere und schnellere Methode.
def find_largest_num(nums)
nums.sort[-1]
end