Vreau sa fac ceva simplu și direct, ca min(5,10)", sau " Matematica.max(4,7)
. Există funcții pentru acest efect în Ruby?
Poti face
[5, 10].min
sau
[4, 7].max
Ele vin de la Enumerable modul, deci nimic care include Enumerable
va avea acele metode disponibile.
v2.4 introduce propriile Matrice#min " și " Matrice#max, care sunt mult mai rapide decât Enumerable's metode, deoarece acestea sări de asteptare
#fiecare`.
EDIT
@nicholasklick menționează o altă opțiune, Enumerable#minmax
, dar de această dată se întoarce o matrice de[min, max]`.
[4, 5, 7, 10].minmax
=> [4, 10]
Puteți utiliza
[5,10].min
sau
[4,7].max
L's o metodă de Tablouri.
Toate aceste rezultate genera gunoi într-un zelos încerca să se ocupe mai mult de două argumente. Am'd fi curios să văd cum se vor efectua în comparație cu bun 'ol:
def max (a,b)
a>b ? a : b
end
care este de-a-mi răspuns oficial la întrebarea ta. :)
În plus față de cele furnizate răspunsuri, dacă doriți pentru a converti Enumerable#max într-un max metodă care poate apela un număr variabil sau argumente, ca și în alte limbaje de programare, ai putea scrie:
def max(*values)
values.max
end
Ieșire:
max(7, 1234, 9, -78, 156)
=> 1234
Acest abuzuri proprietățile bulină operator pentru a crea un obiect matrice care conține toate argumentele oferite, sau un array gol obiect dacă nu există argumente au fost furnizate. În acest din urmă caz, metoda va returna "zero", de asteptare Enumerable#max pe un array gol obiect se întoarce "zero".
Dacă doriți să definiți această metodă pe Matematica module, acest lucru ar trebui să facă truc:
module Math
def self.max(*values)
values.max
end
end
Rețineți că Enumerable.max este, cel puțin, de două ori mai lent în comparație cu operatorul ternar (?:
). A se vedea Dave Morse's a răspunde pentru o mai simplă și mai rapidă metodă.
Dacă aveți nevoie pentru a găsi max/min de hash, puteți utiliza #max_by " sau " #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]