2011-11-07 23 views
56

Probablemente haya una respuesta muy simple a esta pregunta, pero no puedo por el momento descubrirlo. Si tengo una matriz de rubíes de cierto tipo de objetos, y todos ellos tienen un campo en particular, ¿cómo puedo encontrar el elemento de la matriz que tiene el valor más grande para ese campo?Encontrar el elemento de una matriz de Ruby con el valor máximo para un atributo en particular

+0

posible duplicado de [Más versión concisa de max/min sin el bloque] (http://stackoverflow.com/questions/7087717/more-concise-version-of-max-min-without-the-block) –

Respuesta

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

O:

array.max_by(&:field) 
+0

Consulte la documentación del módulo Enumerable para obtener más métodos útiles. –

24

¿Le sirve de ayuda?

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

(supongo que su campo tiene nombre attr)

+0

Sí, eso es exactamente lo que estaba buscando para, estaba recorriendo la api Array y no podía encontrar nada, olvídate de comprobar la API de Enumberable, ¡gracias! –

+1

Siempre verifique la API Enumerable. ¡Tiene todo lo que necesita * y * el fregadero de la cocina! –

+2

Prefiero usar 'max_by' porque es más fácil de usar: el bloque solo toma un solo argumento y no tiene que usar explícitamente el operador de nave espacial (' <=> '). –

0

También puede ordenar la matriz y luego obtener máximo, mínimo, el segundo mayor valor, etc.

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

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

Si solo busca el mínimo o el máximo, los algoritmos son 'O (n)'. La ordenación es por mínimo 'O (n log n)'. No use esto a menos que lo necesite, ya que hay algunas pérdidas de rendimiento innecesarias. – Jamie

Cuestiones relacionadas