Risposte:
Tu puoi fare
[5, 10].min
o
[4, 7].max
Provengono dal modulo Enumerable , quindi tutto ciò che include Enumerable
avrà quei metodi disponibili.
v2.4 introduce proprio Array#min
e Array#max
, che sono molto più veloci dei metodi di Enumerable perché saltano la chiamata #each
.
@nicholasklick menziona un'altra opzione, Enumerable#minmax
ma questa volta restituisce un array di [min, max]
.
[4, 5, 7, 10].minmax
=> [4, 10]
std::max(4, 7)
ha più "punteggiatura" di [4, 7].max
?
std::max
può essere importato nel tuo spazio dei nomi in modo che diventi max(4, 7)
. Aspettare; guardando sopra, vedo che l'ho già detto.
Puoi usare
[5,10].min
o
[4,7].max
È un metodo per array.
Tutti questi risultati generano immondizia nel tentativo zelante di gestire più di due argomenti. Sarei curioso di vedere come si comportano rispetto al buon vecchio:
def max (a,b)
a>b ? a : b
end
che è, tra l'altro, la mia risposta ufficiale alla tua domanda.
[a,b].max
, ma non è ancora chiaro se sia più veloce dell'implementazione di cui sopra. blog.bigbinary.com/2016/11/17/…
Se devi trovare il massimo / minimo di un hash, puoi usare #max_by
o#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]
Oltre alle risposte fornite, se si desidera convertire Enumerable # max in un metodo max che può chiamare un numero variabile o argomenti, come in altri linguaggi di programmazione, è possibile scrivere:
def max(*values)
values.max
end
Produzione:
max(7, 1234, 9, -78, 156)
=> 1234
Ciò abusa delle proprietà dell'operatore splat per creare un oggetto array contenente tutti gli argomenti forniti o un oggetto array vuoto se non sono stati forniti argomenti. In quest'ultimo caso, verrà restituito il metodo nil
, poiché viene restituita la chiamata Enumerable # max su un oggetto array vuoto nil
.
Se vuoi definire questo metodo sul modulo Math, questo dovrebbe fare il trucco:
module Math
def self.max(*values)
values.max
end
end
Si noti che Enumerable.max è almeno due volte più lento rispetto all'operatore ternario ( ?:
) . Vedi la risposta di Dave Morse per un metodo più semplice e veloce.
def find_largest_num(nums)
nums.sort[-1]
end