Пошук елемента масиву Ruby з максимальним значенням для певного атрибута


84

На це питання є, мабуть, дуже проста відповідь, але я не можу до кінця цього зрозуміти. Якщо у мене є рубіновий масив певного типу об’єктів, і всі вони мають певне поле, як мені знайти елемент масиву, який має найбільше значення для цього поля?


Відповіді:



29

Це допомагає?

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

(Я припускаю, що ваше поле має назву attr)


Так, це саме те, що я шукав, чистив масив api і не міг нічого знайти, забудьте перевірити api на Перечислиме, дякую!
Річард Стокс,

1
Завжди перевіряйте Enumerable API. Тут є все необхідне та кухонна мийка!
Sahil Muthoo

2
Я віддаю перевагу використанню, max_byоскільки це простіше у використанні: блок приймає лише один аргумент, і вам не потрібно явно використовувати <=>оператор spacehip ( ).
Девід Грейсон,

@DavidGrayson Дякую за інформацію. Я не знав про існування цього методу. Я проголосую за ваш коментар і відповідь.
p.matsinopoulos

3

Ви також можете відсортувати масив, а потім отримати значення max, min, друге за величиною тощо.

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.