arrays - Ruby - 散列数组、去重键、保留键去重的数组中的值
问题描述
如何从 arr 到 arr_result ?
arr = [ {a => 1},
{a => 2},
{b => 3},
{b => 4},
{b => 10},
{c => 12},
{c => 16},
{d => 7} ]
arr_result = [ {a => [1,2] },
{b => [3,4,10] },
{c => [12,16] },
{d => 7 } ]
对键进行重复数据删除,并将这些键的值保存在发生重复数据删除的数组中。保留不发生重复数据删除的键/值(如示例中的 { d => 7 } 所示)
解决方案
您的输入首先不是有效的 ruby 对象。
arr = [ {a: 1},
{a: 2},
{b: 3},
{b: 4},
{b: 10},
{c: 12},
{c: 16},
{d: 7} ]
arr.
map(&:flatten).
group_by(&:shift).
each { |_, v| v.flatten! }
#⇒ {:a=>[1, 2], :b=>[3, 4, 10], :c=>[12, 16], :d=>[7]}
要得到你想要的东西:
arr.
map(&:flatten).
group_by(&:shift).
map { |k, v| v.flatten! && { k => v.size == 1 ? v.first : v } }
#⇒ [{:a=>[1, 2]}, {:b=>[3, 4, 10]}, {:c=>[12, 16]}, {:d=>7}]
推荐阅读
- c# - 如何显示成功消息然后刷新网页
- javascript - Chart.js 使 pointRadius 响应式
- c# - 如何在 c# .net 中使用 uodotnet.dll UniObjects
- azure-devops - Azure DevOps 中的构建验证管道是否需要触发器
- mysql - 在向 MySQL 表添加数据时,何时使用禁用/启用键提高性能?
- r - 从应用于两个向量的函数创建结果矩阵
- python - 如何将第一个数据框中的列与第二个数据框中的列进行比较,并在匹配时从第二个数据框中的另一列中提取值
- python-3.x - AttributeError:“ApplicantEducation”对象没有属性“_state”
- javascript - 如何将此 JS 函数重写为 PHP
- javascript - 将哈希放在文件名的查询部分而不是包含它是文件