Відповіді:
Ви можете зробити
[5, 10].min
або
[4, 7].max
Вони надходять з модуля « Численні» , тому все, що включає Enumerable
, матиме ці методи.
v2.4 представляє власні Array#min
та Array#max
, які набагато швидші, ніж методи Enumerable, оскільки вони пропускають виклики #each
.
@nicholasklick згадує інший варіант, Enumerable#minmax
але цього разу повертає масив [min, max]
.
[4, 5, 7, 10].minmax
=> [4, 10]
std::max(4, 7)
має більше "пунктуацій", ніж [4, 7].max
?
std::max
їх можна імпортувати у ваш простір імен, щоб він просто став max(4, 7)
. Зачекайте; дивлячись нагорі, я бачу, що я це вже сказав.
Можна використовувати
[5,10].min
або
[4,7].max
Це метод для масивів.
Усі ці результати генерують сміття в ревній спробі обробити більше двох аргументів. Мені буде цікаво побачити, як вони працюють у порівнянні з хорошими 'ol:
def max (a,b)
a>b ? a : b
end
це, до речі, моя офіційна відповідь на ваше запитання.
[a,b].max
, але все ще не ясно, чи швидше це, ніж вищевказана реалізація. blog.bigbinary.com/2016/11/17/…
Якщо вам потрібно знайти макс / хв хешу, ви можете використовувати #max_by
або#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]
На додаток до наданих відповідей, якщо ви хочете перетворити Численні # max у метод max, який може викликати змінну кількість або аргументи, як у деяких інших мовах програмування, ви можете написати:
def max(*values)
values.max
end
Вихід:
max(7, 1234, 9, -78, 156)
=> 1234
Це зловживає властивостями оператора splat створювати об’єкт масиву, що містить усі надані аргументи, або порожній об’єкт масиву, якщо аргументи не були надані. В останньому випадку метод повернеться nil
, оскільки виклик Enumerable # max на об'єкт порожнього масиву повертається nil
.
Якщо ви хочете визначити цей метод у модулі Math, слід зробити це:
module Math
def self.max(*values)
values.max
end
end
Зауважте, що Enumerable.max є, щонайменше, удвічі повільніше порівняно з потрійним оператором ( ?:
) . Дивіться відповідь Дейва Морзе про більш простий і швидкий метод.
def find_largest_num(nums)
nums.sort[-1]
end