Нахождение элемента массива Ruby с максимальным значением для определенного атрибута


85

На этот вопрос, вероятно, есть очень простой ответ, но я не могу понять его в данный момент. Если у меня есть рубиновый массив объектов определенного типа, и все они имеют определенное поле, как мне найти элемент массива, который имеет наибольшее значение для этого поля?


Ответы:



29

Это помогает?

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

(Я предполагаю, что у вашего поля есть имя attr)


Да, это именно то, что я искал, рылся в Array api и ничего не нашел, забыл проверить api для Enumberable, спасибо!
Ричард Стоукс

1
Всегда проверяйте Enumerable API. В нем есть все необходимое и кухонная мойка!
Сахил Муту

2
Я предпочитаю использовать, max_byпотому что его проще использовать: блок принимает только один аргумент, и вам не нужно явно использовать <=>оператор spacehip ( ).
Дэвид Грейсон

@DavidGrayson Спасибо за информацию. Я не знал о существовании этого метода. Проголосую за ваш комментарий и ответ.
p.matsinopoulos 08

3

Вы также можете отсортировать массив, а затем получить максимальное, минимальное, второе по величине значение и т. Д.

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

puts hash[0]["key"]

2
Если вы просто стремитесь к минимуму или максимуму, алгоритмы таковы O(n). Сортировка по минимуму O(n log n). Не используйте это, если вам не нужно, так как есть некоторые ненужные потери производительности.
Джейми

1
Правда. Сортировка - это перебор, чтобы получить максимум. Я добавил это на случай, если кто-то захочет получить 2-й по величине, 3-й по величине и т. Д.
Линджу
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.