Hoe vind je een min/max met Ruby

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 Enumerableheeft deze methoden beschikbaar.

v2.4 introduceert eigen Array#minen Array#max, die veel sneller zijn dan de methoden van Enumerable omdat ze het aanroepen van #eachoverslaan .

@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_byof #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

Other episodes