Используя допустимый массив Ruby:
medicine = [{name: "Apixibucil", patient_id: 1, review_id: 17, nurse_id: 2},
{name: "Adriacilin", patient_id: 1, review_id: 17, nurse_id: 12},
{name: "Tiaferol", patient_id: 4, review_id: 2, nurse_id: 17},
{name: "Afalinum", patient_id: 6, review_id: 7, nurse_id: 10},
{name: "Afalinum", patient_id: 9, review_id: 9, nurse_id: 9},
{name: "Afalinum", patient_id: 22, review_id: 13, nurse_id: 1}]
Вы можете использовать Enumerable#group_by
и Hash#transform_values
:
medicine.group_by{ |h| h[:name] }.transform_values { |v| v.size}.max_by { |_, v| v }
Или с помощью Enumerable#each_with_object
с использованием Hash#new
по умолчанию 0, чтобы считать:
medicine.each_with_object(Hash.new(0)) { |h, o| o[h[:name]] += 1 }.max_by { |_, v| v }
В обоих случаях используется Enumerable#max_by
, чтобы получить максимальное количество, возвращая:
["Afalinum", 3]
Если вы используете Rails, проверьте
вычисления , возможно, вы можете сделать:
Medicine.group(:name).count
# => { 'Apixibucil' => 1, 'Adriacilin' => 1, 'Tiaferol' => 1, 'Afalinum' => 3 }