Jawaban:
Anda dapat melakukan
[5, 10].min
atau
[4, 7].max
Mereka datang dari modul Enumerable , jadi apa pun yang termasuk Enumerable
akan memiliki metode tersebut tersedia.
v2.4 memperkenalkan sendiri Array#min
dan Array#max
, yang jauh lebih cepat daripada metode Enumerable karena mereka melewatkan panggilan #each
.
@nicholasklick menyebutkan opsi lain Enumerable#minmax
, tetapi kali ini mengembalikan array [min, max]
.
[4, 5, 7, 10].minmax
=> [4, 10]
std::max(4, 7)
memiliki lebih banyak "tanda baca" daripada [4, 7].max
?
std::max
dapat diimpor ke namespace Anda sehingga menjadi max(4, 7)
. Tunggu; melihat di atas, saya melihat saya sudah mengatakan itu.
Kamu bisa menggunakan
[5,10].min
atau
[4,7].max
Ini adalah metode untuk Array.
Semua hasil tersebut menghasilkan sampah dalam upaya yang bersemangat untuk menangani lebih dari dua argumen. Saya ingin tahu bagaimana kinerjanya dibandingkan dengan yang baik:
def max (a,b)
a>b ? a : b
end
yaitu, by-the-way, jawaban resmi saya untuk pertanyaan Anda.
[a,b].max
, tetapi masih belum jelas apakah ini lebih cepat dari implementasi di atas. blog.bigbinary.com/2016/11/17/…
Jika Anda perlu mencari maks / min hash, Anda bisa menggunakan #max_by
atau#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]
Selain jawaban yang diberikan, jika Anda ingin mengonversi Enumerable # max menjadi metode max yang dapat memanggil nomor variabel atau argumen, seperti dalam beberapa bahasa pemrograman lain, Anda dapat menulis:
def max(*values)
values.max
end
Keluaran:
max(7, 1234, 9, -78, 156)
=> 1234
Ini menyalahgunakan properti operator percikan untuk membuat objek array yang berisi semua argumen yang disediakan, atau objek array kosong jika tidak ada argumen yang disediakan. Dalam kasus terakhir, metode ini akan kembali nil
, karena memanggil Enumerable # max pada objek array kosong akan kembali nil
.
Jika Anda ingin mendefinisikan metode ini pada modul Matematika, ini harus melakukan trik:
module Math
def self.max(*values)
values.max
end
end
Perhatikan bahwa Enumerable.max, setidaknya, dua kali lebih lambat dibandingkan dengan operator ternary ( ?:
) . Lihat jawaban Dave Morse untuk metode yang lebih sederhana dan lebih cepat.
def find_largest_num(nums)
nums.sort[-1]
end