2009-08-31 11 views

cevap

582

bunu yapabilirsiniz

[5, 10].min 

veya

[4, 7].max 

Onlar Enumerable module geldiği için Enumerable içerir şey bu yöntemleri kullanılabilir olacaktır.

başka bir seçenek, Enumerable#minmax fakat [min, max] bir dizi dönen bu kez bahseder @nicholasklick DÜZENLEME

.

[4, 7].minmax 
=> [4, 7] 
Başlangıçtaki dizide sadece 2 değerlerle çok ilginç görünmüyor

yüzden

[4, 5, 7, 10].minmax 
=> [4, 10] 
+0

Çok güzel! – Ziggy

+8

Ya da sadece http://www.ruby-doc.org/core-2.0/Enumerable.html#method-i-minmax – nicholasklick

+0

Yaparsınız @nicholasklick, sadece cevabımı güncelledim. Var olduğunu bile bilmiyordum! – theIV

45

Sen O

[5,10].min 

veya

[4,7].max 

var kullanabilirsiniz Diziler için bir yöntem. Bazı diğer programlama dillerinde olduğu gibi değişken numara veya argümanlar, çağırabilir maksimum yöntem haline Enumerable#max dönüştürmek istiyorsanız

sağlanan cevaplara ek olarak
+18

Teknik olarak, Diziler değil, Enumerables için bir yöntemdir. – meagar

18

, yazabilirsiniz:

def max(*values) 
values.max 
end 

Çıktı:

max(7, 1234, 9, -78, 156) 
=> 1234 

Bu kötüye uyarısı operatörün özellikleri herhangi bir argüman sağlanması durumunda sağlanan tüm bağımsız değişkenler veya boş bir dizi nesne içeren bir dizi nesne oluşturmak için. İkinci durumda, nil döndürme yöntemi nil döndürür, boş bir dizi nesnesinde Enumerable#max çağırıyor.

Matematik modülünde bu yöntemi tanımlamak istiyorsanız, bu hile yapmak gerekir: Enumerable.max, en azından, two times slower compared to the ternary operator (?:) olduğunu

module Math 
def self.max(*values) 
    values.max 
end 
end 

Not. Daha basit ve daha hızlı bir yöntem için Dave Morse's answer'a bakın. Eğer bir karma maksimum/dk bulmanız gerekiyorsa

13

, sen #max_by veya

people = {'joe' => 21, 'bill' => 35, 'sally' => 24} 

people.min_by { |name, age| age } #=> ["joe", 21] 
people.max_by { |name, age| age } #=> ["bill", 35] 
19

#min_by Tüm bu sonuçlar ikiden fazla bağımsız değişken işlemek için gayretkeşliğiyle çöp üretmek kullanabilirsiniz. Ben onlar iyi 'ol kıyasla nasıl bir performans görmek merak duyarım:

sorunuzun by-yönlü benim resmi cevaptır
def max (a,b) 
    a>b ? a : b 
end 

.:)

+0

Ruby 2.4'ün [a, b] .max'yi en iyi duruma getirdiği bazı yanıltıcı noktalar var, ancak yukarıdaki uygulamadan daha hızlı olup olmadığı henüz belli değil. http://blog.bigbinary.com/2016/11/17/ruby-2-4-implements-array-min-and-max.html –

İlgili konular