Es gibt wahrscheinlich eine sehr einfache Antwort auf diese Frage, aber ich kann es für mein ganzes Leben im Moment nicht herausfinden. Wenn ich ein Ruby-Array eines bestimmten Objekttyps habe und alle ein bestimmtes Feld haben, wie finde ich das Element des Arrays, das den größten Wert für dieses Feld hat?
83
Antworten:
array.max_by do |element| element.field end
Oder:
array.max_by(&:field)
quelle
Hilft das?
my_array.max {|a,b| a.attr <=> b.attr }
(Ich gehe davon aus, dass Ihr Feld einen Namen hat
attr
)quelle
max_by
da die Verwendung einfacher ist: Der Block akzeptiert nur ein einziges Argument und Sie müssen den<=>
Operator spacehip ( ) nicht explizit verwenden .Sie können das Array auch sortieren und dann den maximalen, minimalen, zweitgrößten Wert usw. erhalten.
array = array.sort_by {|k,v| v}.reverse puts hash[0]["key"]
quelle
O(n)
. Die Sortierung erfolgt nach MinimumO(n log n)
. Verwenden Sie dies nur, wenn Sie dies benötigen, da es zu unnötigen Leistungsverlusten kommt.