Tôi muốn làm điều gì đó đơn giản và dễ hiểu, như min(5,10)
hoặc Math.max(4,7)
. Có chức năng nào cho hiệu ứng này trong Ruby không?Bạn tìm min/max với Ruby bằng cách nào?
Trả lời
Bạn có thể làm
[5, 10].min
hoặc
[4, 7].max
Họ đến từ Enumerable module, vì vậy bất cứ điều gì trong đó bao gồm Enumerable
sẽ có những phương pháp có sẵn.
EDIT
@nicholasklick đề cập đến một lựa chọn, Enumerable#minmax
, nhưng lần này trở về một mảng của [min, max]
.
[4, 7].minmax
=> [4, 7]
Nó không có vẻ rất thú vị với chỉ có 2 giá trị trong mảng ban đầu, vì vậy
[4, 5, 7, 10].minmax
=> [4, 10]
Bạn có thể sử dụng
[5,10].min
hoặc
[4,7].max
Đó là một phương thức cho mảng.
Về mặt kỹ thuật, nó là một phương pháp cho Số đếm, chứ không phải là Mảng. – meagar
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 pháp 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
Output:
max(7, 1234, 9, -78, 156)
=> 1234
Điều này lạm dụng thuộc tính của toán tử splat để tạo đối tượng mảng chứa tất cả đối số được cung cấp hoặc đố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 thứ hai, phương thức sẽ trả về nil
, vì gọi số 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 pháp này trên các mô-đun Math, điều này sẽ làm các trick:
module Math
def self.max(*values)
values.max
end
end
Lưu ý rằng Enumerable.max là, ít nhất, two times slower compared to the ternary operator (?:
). Xem Dave Morse's answer để có phương thức đơn giản và nhanh hơn.
Nếu bạn cần phải tìm ra max/min của một hash, 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]
Tất cả những kết quả tạo ra rác trong một nỗ lực nhiệt tâm để xử lý hơn hai đối số. Tôi rất tò mò muốn xem chúng hoạt động như thế nào so với hiệu quả 'ol:
def max (a,b)
a>b ? a : b
end
là câu trả lời chính thức cho câu hỏi của bạn.:)
Có một số rắc rối mà Ruby 2.4 đang tối ưu hóa '[a, b] .max', nhưng nó vẫn không rõ ràng nếu nó nhanh hơn so với thực hiện ở trên. http://blog.bigbinary.com/2016/11/17/ruby-2-4-implements-array-min-and-max.html –
- 1. C# minmax graph search
- 2. Bạn muốn tìm thông dịch viên ruby nào?
- 3. làm thế nào để bạn nói không bằng ruby?
- 4. Bạn đã ký hợp đồng với dự án Agile bằng cách nào? (không phải cách bạn nghĩ bạn sẽ làm như thế nào, bạn đã làm thế nào)
- 5. Bạn đã thay thế makefiles bằng tập lệnh ruby chưa?
- 6. Tìm kiếm sách Ruby Ruby
- 7. Tôi có thể đọc tệp bằng Ruby bằng cách nào?
- 8. Làm cách nào để tìm kiếm trong một mảng băm bằng giá trị băm trong ruby?
- 9. Cách tìm vị trí hiện tại của bạn với CoreLocation
- 10. Làm cách nào để Ruby tìm một thư viện gốc?
- 11. Làm cách nào để bạn tìm kiếm nhiều chuỗi bằng phương thức .search()?
- 12. Kết nối với Oracle DB bằng cách sử dụng Ruby
- 13. Cách tìm kiếm một mảng trong Ruby?
- 14. Làm thế nào để bạn sử dụng Ruby trong Java?
- 15. tìm kiếm và thay thế bằng ruby regex
- 16. Làm cách nào để thoát chuỗi Unicode bằng Ruby?
- 17. Làm thế nào để bạn stringize/serialize mã Ruby?
- 18. Bạn có thể tìm kiếm Google Play bằng Intent không?
- 19. Làm cách nào để tạo mã băm SHA1 bằng ruby?
- 20. Làm cách nào để tải xuống ảnh bằng Ruby?
- 21. Tôi có thể gọi Ruby từ Node.js bằng cách nào?
- 22. Tìm đá quý ruby xác định ngôn ngữ lập trình bằng cách đọc mã?
- 23. làm cách nào bạn đặt kính lúp và "tìm kiếm" trong hộp tìm kiếm trong stackoverflow?
- 24. Làm cách nào để bạn đặt applicationIconBadgeNumber bằng scheduleLocalNotification?
- 25. cách đặt ruby mặc định bằng rvm
- 26. Bạn nhập mã gì vào Ruby? Ruby có ưu thế gì với các ngôn ngữ khác?
- 27. Cách tìm số lần xuất hiện cuối cùng của một số trong chuỗi bằng Ruby?
- 28. Làm cách nào để tìm số trong chuỗi bằng JavaScript?
- 29. "MSVCRT-ruby18.dll không tìm thấy" với Ruby
Thật đẹp! – Ziggy
Hoặc bạn chỉ cần http://www.ruby-doc.org/core-2.0/Enumerable.html#method-i-minmax – nicholasklick
Cảm ơn @nicholasklick, vừa cập nhật câu trả lời của tôi. Thậm chí không biết rằng đã tồn tại! – theIV