我正在尝试获取这个哈希值数组...
items => [{:name=>"item a", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item b", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item a", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item b", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item c", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item d", :count=>1, :contributors=>["51db6d58bd02861e96000004"]}]
并得到如下所示的输出...
items => [{:name=>"item a", :count=>2, :contributors=>["51db6d58bd02861e96000004", "51db6d58bd02861e96000004"]},
{:name=>"item b", :count=>2, :contributors=>["51db6d58bd02861e96000004, 51db6d58bd02861e96000004"]},
{:name=>"item c", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item d", :count=>1, :contributors=>["51db6d58bd02861e96000004"]}]
我想按名称分组并合并计数和贡献者,如上图所示。我怎么做? Group_by,减少?有人可以发布示例吗?
最佳答案
使用 Enumerable#group_by
:
items = [
{:name=>"item a", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item b", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item a", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item b", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item c", :count=>1, :contributors=>["51db6d58bd02861e96000004"]},
{:name=>"item d", :count=>1, :contributors=>["51db6d58bd02861e96000004"]}
]
items.group_by { |h| h[:name] }.map { |key, hs|
{:name => key,
:count => hs.inject(0) { |c, h| c + h[:count] },
:contributors => hs.map { |h| h[:contributors] }
}
}
# => [{:name=>"item a", :count=>2,
# :contributors=>[["51db6d58bd02861e96000004"], ["51db6d58bd02861e96000004"]]},
# {:name=>"item b", :count=>2,
# :contributors=>[["51db6d58bd02861e96000004"], ["51db6d58bd02861e96000004"]]},
# {:name=>"item c", :count=>1, :contributors=>[["51db6d58bd02861e96000004"]]},
# {:name=>"item d", :count=>1, :contributors=>[["51db6d58bd02861e96000004"]]}]
关于ruby - 合并和合并哈希数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26070951/