Решение вашей проблемы:
array.map(&:first).group_by(&:first).map{|k, v| {k => v.map(&:last)}}
Мне интересно, почему вы начинаете и заканчиваете хешами, содержащими только одну пару ключей.Массивы были бы лучше подходят.Например:
other = [["a", "1"], ["b", "2"], ["a", "3"], ["b", "4"], ["a", "5"]]
r = other.group_by(&:first).map{|k, v| [k => v.map(&:last)]}
r # => [["a", ["1", "3", "5"]], ["b", ["2", "4"]]]
Hash[r] # => {"a"=>["1", "3", "5"], "b"=>["2", "4"]}