我有一系列哈希:
[{:type=>"Item", :ordinal=>1, :name=>"Test1", :symbol=>"test", :attribute=>"test1", :eq_type=>"t1"},
{:type=>"Item", :ordinal=>2, :name=>"Test2", :symbol=>"test2", :attribute=>"test2", :eq_type=>"t1"},
{:type=>"Item", :ordinal=>1, :name=>"Test1", :symbol=>"test", :attribute=>"test1", :eq_type=>"t2"},
{:type=>"Item", :ordinal=>2, :name=>"Test3", :symbol=>"test", :attribute=>"test1", :eq_type=>"t2"}]
我想创建另一个哈希数组,但它将在:eq_type
上分组,并包含所有相关的名称值。
所需的输出是:
[{:eq_type=>"t1" :name=>"Test1,Test2"},
{:eq_type=>"t2" :name=>"Test1,Test3"}]
答案 0 :(得分:1)
arr.group_by { |h| h[:eq_type] }.map do |k, v|
{eq_type: k, name: v.map { |h| h[:name] }.join(',') }
end
arr
的位置:
[{:type=>"Item", :ordinal=>1, :name=>"Test1", :symbol=>"test", :attribute=>"test1", :eq_type=>"t1"},
{:type=>"Item", :ordinal=>2, :name=>"Test2", :symbol=>"test2", :attribute=>"test2", :eq_type=>"t1"},
{:type=>"Item", :ordinal=>1, :name=>"Test1", :symbol=>"test", :attribute=>"test1", :eq_type=>"t2"},
{:type=>"Item", :ordinal=>2, :name=>"Test3", :symbol=>"test", :attribute=>"test1", :eq_type=>"t2"}]
答案 1 :(得分:0)
另一种方式:
arr = [{:name=>"Test1", :symbol=>"test", :eq_type=>"t1"},
{:name=>"Test2", :symbol=>"test2", :eq_type=>"t1"},
{:name=>"Test1", :symbol=>"test", :eq_type=>"t2"},
{:name=>"Test3", :symbol=>"test", :eq_type=>"t2"}]
arr.each_with_object({}) { |g,h| (h[g[:eq_type]] ||= []) << g[:name] }.
map { |k,v| { eq_type: k, name: v.join(',') } }
#=> [{:eq_type=>"t1", :name=>"Test1,Test2"},
# {:eq_type=>"t2", :name=>"Test1,Test3"}]