Ответы:
Ты можешь сделать
[5, 10].min
или
[4, 7].max
Они приходят из модуля Enumerable , поэтому все, что включает, Enumerable
будет иметь эти методы доступными.
В версии 2.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
Это метод для массивов.
Все эти результаты создают мусор в ревностной попытке обработать более двух аргументов. Мне было бы любопытно посмотреть, как они работают по сравнению с хорошими оль:
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]
В дополнение к предоставленным ответам, если вы хотите преобразовать Enumerable # 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