2011-11-07 14 views
56

Probabilmente c'è una risposta molto semplice a questa domanda, ma non posso per la vita di me capirlo al momento. Se ho un array di ruby ​​di un certo tipo di oggetti, e hanno tutti un campo particolare, come faccio a trovare l'elemento dell'array che ha il valore più grande per quel campo?Trovare l'elemento di una matrice di Ruby con il valore massimo per un particolare attributo

+0

possibile duplicato di [Altro versione concisa di max/min senza il blocco] (http://stackoverflow.com/questions/7087717/more-concise-version-of-max-min-without-the-block) –

risposta

112
array.max_by do |element| 
    element.field 
end 

Oppure:

array.max_by(&:field) 
+0

Controllare la documentazione del modulo Enumerable per ulteriori metodi utili. –

24

Questo aiuto?

my_array.max {|a,b| a.attr <=> b.attr } 

(presumo che il campo ha nome attr)

+0

Sì, questo è esattamente quello che stavo cercando per, stava setacciando la api di Array e non riusciva a trovare nulla, dimentica di controllare l'api per Enumberable, grazie! –

+1

Controllare sempre l'API Enumerable. Ha tutto il necessario * e * il lavello della cucina! –

+2

Preferisco usare 'max_by' perché è più semplice da usare: il blocco accetta un solo argomento e non è necessario utilizzare esplicitamente l'operatore spaziale (' <=> '). –

0

È inoltre possibile ordinare l'array e quindi ottenere max, min, il secondo più grande valore, ecc

array = array.sort_by {|k,v| v}.reverse 

puts hash[0]["key"] 
+1

Se stai semplicemente andando al minimo o al massimo, gli algoritmi sono 'O (n)'. L'ordinamento è minimo 'O (n log n)'. Non utilizzare questo a meno che non sia necessario, in quanto vi sono alcune perdite di prestazioni inutili. – Jamie

Problemi correlati