首页 > 解决方案 > Ruby - 基于相似哈希键的哈希数组

问题描述

我有一个哈希数组,看起来像:

[{"PROJECT"=>"awesome_project1","VERSION"=>128, "STATUS"=>"not required"},
 {"PROJECT"=>"awesome_project2", "VERSION"=>32, "STATUS"=>"finished"},
 {"PROJECT"=>"awesome_project1", "VERSION"=>64, "STATUS"=>"scheduled"}]

而且我正在尝试基于其中一个 hask 键合并散列,因为我知道 group_by 的键可以更改。因此,如果我想 group_by "PROJECT" 它看起来像:

[{"PROJECT"=>"awesome_project1","VERSION"=>[128,64], "STATUS"=>["not required","scheduled"]},
 {"PROJECT"=>"awesome_project2", "VERSION"=>32, "STATUS"=>"finished"}]

目前最接近结果的是使用 group_by。

你知道怎么做吗?

标签: rubyhash

解决方案


您需要group_by然后将reduce值合并它们。

input.
  group_by { |h| h["PROJECT"] }.
  values.
  map do |v|
    v.reduce({}) do |acc, h|
      acc.merge(h) { |_, v1, v2| v1 == v2 ? v1 : [*v1, *v2] }
    end
  end

#⇒ [{"PROJECT"=>"awesome_project1",
#    "VERSION"=>[128, 64],
#    "STATUS"=>["not required", "scheduled"]},
#   {"PROJECT"=>"awesome_project2",
#    "VERSION"=>32,
#    "STATUS"=>"finished"}]

推荐阅读