![](/img/trans.png)
[英]How to add and merge values from different array of hashes in ruby on rails
[英]how to merge Hashes in Ruby/Rails
我有一个像这样的 Hash ,它应该“合并”到它的 uniq 嵌套值
[
{
"slug": "color",
"values": [{ "slug": "amethyst" },
{ "slug": "coral" }],
},
{
"slug": "color",
"values": [{ "slug": "amethyst" }],
},
{
"slug": "power-source",
"values": [{ "slug": "110V"}],
}
]
同时它应该计算重复值,但在items
数组中设置为 uniq:
{ "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
我认为 Rails 中没有任何内置功能可以让您获得这样的自定义要求,但是您可以通过使用不同的方法及其返回值来实现它:
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}]}]
如您所见,您可以首先将数组中的每个 hash 按它们的slug
值分组,然后转换 hash 包含的值,通过它们的values
键映射和展平每个数组,然后分组以获得它们的总数。
之后,您可以使用所需的键/值创建 hash。
如果你最终得到一个 hash,它的键是“slugs”并且包含项目作为它的值,它可能会简化一些事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.