Câu trả lời:
Bạn có thể làm
[5, 10].min
hoặc là
[4, 7].max
Chúng đến từ mô-đun En đếm , vì vậy bất cứ điều gì bao gồm Enumerable
sẽ có sẵn các phương thức đó.
v2.4 giới thiệu riêng Array#min
và Array#max
, nhanh hơn các phương thức của Enumerable vì họ bỏ qua cuộc gọi #each
.
@nicholasklick đề cập đến một tùy chọn khác Enumerable#minmax
, nhưng lần này trả về một mảng [min, max]
.
[4, 5, 7, 10].minmax
=> [4, 10]
std::max(4, 7)
có nhiều "dấu câu" hơn [4, 7].max
?
std::max
có thể được nhập vào không gian tên của bạn để nó trở thành max(4, 7)
. Chờ đợi; Nhìn phía trên, tôi thấy tôi đã nói điều đó rồi.
Bạn có thể dùng
[5,10].min
hoặc là
[4,7].max
Đó là một phương pháp cho Mảng.
Tất cả những kết quả đó tạo ra rác trong một nỗ lực nhiệt tình để xử lý nhiều hơn hai đối số. Tôi tò mò muốn xem cách họ thể hiện so với 'ol tốt:
def max (a,b)
a>b ? a : b
end
Nhân tiện, đây là câu trả lời chính thức cho câu hỏi của bạn.
[a,b].max
, nhưng vẫn chưa rõ liệu nó có nhanh hơn so với triển khai ở trên không. blog.bigbinary.com/2016/11/17/õ
Nếu bạn cần tìm tối đa / phút của hàm băm, bạn có thể sử dụng #max_by
hoặc#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]
Ngoài các câu trả lời được cung cấp, nếu bạn muốn chuyển đổi Enumerable # max thành một phương thức tối đa có thể gọi một số biến hoặc đối số, như trong một số ngôn ngữ lập trình khác, bạn có thể viết:
def max(*values)
values.max
end
Đầu ra:
max(7, 1234, 9, -78, 156)
=> 1234
Điều này lạm dụng các thuộc tính của toán tử splat để tạo một đối tượng mảng chứa tất cả các đối số được cung cấp hoặc một đối tượng mảng trống nếu không có đối số nào được cung cấp. Trong trường hợp sau, phương thức sẽ trả về nil
, vì gọi Enumerable # max trên một đối tượng mảng trống trả về nil
.
Nếu bạn muốn xác định phương thức này trên mô-đun Math, thì nên thực hiện thủ thuật này:
module Math
def self.max(*values)
values.max
end
end
Lưu ý rằng Enumerable.max chậm hơn hai lần so với toán tử ternary ( ?:
) . Xem câu trả lời của Dave Morse cho một phương pháp đơn giản và nhanh hơn.
def find_largest_num(nums)
nums.sort[-1]
end