На этот вопрос, вероятно, есть очень простой ответ, но я не могу понять его в данный момент. Если у меня есть рубиновый массив объектов определенного типа, и все они имеют определенное поле, как мне найти элемент массива, который имеет наибольшее значение для этого поля?
85
Ответы:
array.max_by do |element| element.field end
Или же:
array.max_by(&:field)
источник
Это помогает?
my_array.max {|a,b| a.attr <=> b.attr }
(Я предполагаю, что у вашего поля есть имя
attr
)источник
max_by
потому что его проще использовать: блок принимает только один аргумент, и вам не нужно явно использовать<=>
оператор spacehip ( ).Вы также можете отсортировать массив, а затем получить максимальное, минимальное, второе по величине значение и т. Д.
array = array.sort_by {|k,v| v}.reverse puts hash[0]["key"]
источник
O(n)
. Сортировка по минимумуO(n log n)
. Не используйте это, если вам не нужно, так как есть некоторые ненужные потери производительности.