На це питання є, мабуть, дуже проста відповідь, але я не можу до кінця цього зрозуміти. Якщо у мене є рубіновий масив певного типу об’єктів, і всі вони мають певне поле, як мені знайти елемент масиву, який має найбільше значення для цього поля?
На це питання є, мабуть, дуже проста відповідь, але я не можу до кінця цього зрозуміти. Якщо у мене є рубіновий масив певного типу об’єктів, і всі вони мають певне поле, як мені знайти елемент масиву, який має найбільше значення для цього поля?
Відповіді:
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 ( ).
Ви також можете відсортувати масив, а потім отримати значення max, min, друге за величиною тощо.
array = array.sort_by {|k,v| v}.reverse
puts hash[0]["key"]
O(n)
. Сортування мінімальне O(n log n)
. Не використовуйте це, якщо вам це не потрібно, оскільки є деякі непотрібні втрати продуктивності.