Here is trick :
a = [
{ alpha: 'a', num: '1'},
{ alpha: 'b', num: '1'},
{ alpha: 'a', num: '2'},
{ alpha: 'b', num: '2'}
]
alpha_arry = a.group_by { |h| h[:alpha] }.map do |key,value|
{:alpha => key, :num => value.collect { |num_hash| num_hash[:num] }}
end
alpha_arry
# => [{:alpha=>"a", :num=>["1", "2"]}, {:alpha=>"b", :num=>["1", "2"]}]
num_arry = a.group_by { |h| h[:num] }.map do |key,value|
{:num => key, :alpha => value.collect { |alpha_hash| alpha_hash[:alpha] }}
end
num_arry
# => [{:num=>"1", :alpha=>["a", "b"]}, {:num=>"2", :alpha=>["a", "b"]}]