ruby - 合并和合并哈希数组

标签 ruby arrays hash enumerable

我正在尝试获取这个哈希值数组...

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/

相关文章:

javascript - 无法验证 Stripe Payments 的 CSRF token [Rails 4]

C:使用以指针为参数的 void 函数更改 char 数组的值

C# 从文件读取数据 block 到字节数组

linux - md5sum linux 命令的哈希长度

python - 用 Python 代码编写的 SHA 512 crypt 输出与 mkpasswd 不同

ruby-on-rails - Watir-Webdriver - 协议(protocol)不支持的地址族 - socket(2)

arrays - 在范围和计数的散列中对整数数组进行分组

ruby - 在 Ruby 中,使用 "net/http",我们必须加入 url 并自己使用 "?"进行查询?

javascript - 在 JavaScript 中访问和存储数据集

Javascript 发布数据顺序