Ik wil min(5,10)
of Math.max(4,7)
gebruiken. Zijn er hiervoor functies in Ruby?
Antwoord 1, autoriteit 100%
U kunt doen
[5, 10].min
of
[4, 7].max
Ze komen uit de Opsombare module, dus alles dat Enumerable
heeft deze methoden beschikbaar.
v2.4 introduceert eigen Array#min
en Array#max
, die veel sneller zijn dan de methoden van Enumerable omdat ze het aanroepen van #each
overslaan .
@nicholasklick noemt een andere optie, Enumerable#minmax
, maar deze keer wordt een array geretourneerd van [min, max]
.
[4, 5, 7, 10].minmax
=> [4, 10]
Antwoord 2, autoriteit 7%
U kunt
. gebruiken
[5,10].min
of
[4,7].max
Het is een methode voor arrays.
Antwoord 3, autoriteit 4%
Al die resultaten genereren afval in een ijverige poging om meer dan twee argumenten te verwerken. Ik zou benieuwd zijn om te zien hoe ze presteren in vergelijking met goede ‘ol:
def max (a,b)
a>b ? a : b
end
wat trouwens mijn officiële antwoord op uw vraag is.
Antwoord 4, autoriteit 3%
Als je de max/min van een hash wilt vinden, kun je #max_by
of #min_by
gebruiken
people = {'joe' => 21, 'bill' => 35, 'sally' => 24}
people.min_by { |name, age| age } #=> ["joe", 21]
people.max_by { |name, age| age } #=> ["bill", 35]
Antwoord 5, autoriteit 3%
In aanvulling op de gegeven antwoorden, als u Enumerable#maxin een max-methode die een variabel getal of argumenten kan aanroepen, zoals in sommige andere programmeertalen, je zou kunnen schrijven:
def max(*values)
values.max
end
Uitvoer:
max(7, 1234, 9, -78, 156)
=> 1234
Dit maakt misbruik van de eigenschappen van de splat-operator om een array-object te maken dat alle opgegeven argumenten bevat, of een leeg array-object als er geen argumenten zijn opgegeven. In het laatste geval retourneert de methode nil
, aangezien Enumerable#maxop een leeg array-object retourneert nil
.
Als je deze methode in de Math-module wilt definiëren, zou dit moeten lukken:
module Math
def self.max(*values)
values.max
end
end
Merk op dat Enumerable.max in ieder geval twee keer langzamer is in vergelijking met de ternaire operator (?:
). Zie Het antwoord van Dave Morsevoor een eenvoudigere en snellere methode.
Antwoord 6
def find_largest_num(nums)
nums.sort[-1]
end