Полагаю, это то, что вы хотите.
hashed_data.group_by { |h| h[:name] }.
map { |_,v| v.max_by { |g| g[:session_total] } }
#=> [{:name=>"frontend", :session_total=>145, :byte=>54667},
# {:name=>"backend_stagging", :session_total=>546, :byte=>895747},
# {:name=>"backend", :session_total=>5468, :byte=>8957447}]
Обратите внимание, что первое вычисление выглядит следующим образом.
hashed_data.group_by { |h| h[:name] }
#=> {"frontend"=>[{:name=>"frontend", :session_total=>145, :byte=>54667},
# {:name=>"frontend", :session_total=>54, :byte=>67387}],
# "backend_stagging"=>[{:name=>"backend_stagging", :session_total=>546,
# :byte=>895747}],
# "backend"=>[{:name=>"backend", :session_total=>5468, :byte=>8957447}]}
Во-первых, вы говорите, что хотите первый элементмассив возвращается:
{:name=>"frontend", :session_total=>546, :byte=>54667}
Я предполагаю, что значение :session_total
является опечаткой, и должно быть 145
.
Во-вторых, я предполагаю, что когда два или более хэшей имеют одинаковое значение :name
(здесь просто "frontend"
), вы хотите оставить тот, для которого значение session_total
является наибольшим (но этодействительно дикое предположение).
В-третьих, вы, кажется, хотите изменить значение "backend_staging"
на ключ :summary
.Если это так, это не главное в вопросе, а просто неудобство для тех, кто дает ответы, поэтому я проигнорировал это требование.