将重复哈希值插入新哈希

时间:2014-12-12 20:31:54

标签: ruby

我有一系列哈希:

[{: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"}]

2 个答案:

答案 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"}]