首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Ruby/Rails中合并散列

如何在Ruby/Rails中合并散列
EN

Stack Overflow用户
提问于 2021-05-03 16:47:05
回答 1查看 47关注 0票数 0

我有一个像这样的Hash,它应该被“合并”到它的uniq嵌套值

代码语言:javascript
复制
[
  {
    "slug": "color",
    "values": [{ "slug": "amethyst" },
               { "slug": "coral" }],
  },
  {
    "slug": "color",
    "values": [{ "slug": "amethyst" }],
  },
  {
    "slug": "power-source",
    "values": [{ "slug": "110V"}],
  }
]

同时,它应该计算重复的值,但在items数组中使用uniq:

代码语言:javascript
复制
 {  "slug": "color",
    "items": [
             {
              "slug": "amethyst",
              "count": 2
             },
             {
              "slug": "coral",
              "count": 1
             }]
 },
{
   "slug": "power-source",
   "items": [
             {
              "slug": "110V",
              "count": 1
             }]
 }
]

is there a "Rails method" to achieve this?

Thank you
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-03 17:30:05

我认为Rails中没有内置的东西可以让你获得这样的自定义需求,但你可以通过尝试不同的方法和它们的返回值来实现:

代码语言:javascript
复制
data
  .group_by { |hash| hash[:slug] }
  .transform_values do |values|
    values
      .flat_map { |vals| vals[:values] }
      .group_by { |value| value[:slug] }
      .transform_values(&:count)
  end.map do |slug, items|
    [slug, items.map { |item, count| {slug: item, count: count} }]
  end.map { |slug, items| {slug: slug, items: items} }
  # [{:slug=>"color",
  #   :items=>[{:slug=>"amethyst", :count=>2}, {:slug=>"coral", :count=>1}]},
  #  {:slug=>"power-source", :items=>[{:slug=>"110V", :count=>1}]}]

如您所见,您可以首先根据散列的slug值对数组中的每个散列进行分组,然后转换散列包含的值,根据数组的values键映射和展平每个数组,然后进行分组以获得它们的总和。

之后,您只需使用所需的键/值创建哈希即可。

如果你最终使用一个散列,它的关键字是"slugs“,并包含项作为它的值,那么它可能会简化一些事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67365983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档