ruby-on-rails - 合并哈希数组并重新排序
问题描述
我有一组哈希看起来像
arr = [
{"partner_name"=>"Bell", "publisher_name"=>"News - Calgary", "mn"=>"", "mid"=>415},
{"partner_name"=>"Bell", "publisher_name"=>"News - Vancouver Island", "mn"=>"Module 2.0 ", "mid"=>4528},
{"partner_name"=>"Bell", "publisher_name"=>"News - Atlantic", "mn"=>"Module 2.0 ", "mid"=>4531},
{"partner_name"=>"Bell", "publisher_name"=>"News - Kitchener", "mn"=>"Module 2.0 ", "mid"=>4535},
{"partner_name"=>"Bell", "publisher_name"=>"News - London", "mn"=>"Module 2.0 ", "mid"=>4536},
{"partner_name"=>"Bell", "publisher_name"=>"News - Ottawa", "mn"=>"Module 2.0 ", "mid"=>4539},
{"partner_name"=>"Bell", "publisher_name"=>"News - Regina", "mn"=>"Module 2.0 ", "mid"=>4540},
{"partner_name"=>"Bell", "publisher_name"=>"News - Saskatoon", "mn"=>"Module 2.0 ", "mid"=>4541},
{"partner_name"=>"Bell", "publisher_name"=>"News - Toronto", "mn"=>"Module 2.0 ", "mid"=>4542},
{"partner_name"=>"Bell", "publisher_name"=>"News - Windsor", "mn"=>"Module 2.0 ", "mid"=>4544},
{"partner_name"=>"Bell", "publisher_name"=>"CP24", "mn"=>"Module 2.0 Platform", "mid"=>5413},
]
我试过做arr.group_by{|el|el['partner_name']}
我想达到这个结果
{
partner:'Bell',
publishers: [
{name:'News - Vancouver Island'},
{name:'News - Vancouver Island'},
# ... and others
],
modules:[
{mn: val, mid: id_val},
# ...
],
}
解决方案
group_by 和地图
result = arr.
group_by { |r| r["partner_name"] }.
map do |(partner_name, records)|
{
name: partner_name,
publishers: records.map do |r|
{ name: r["publisher_name"] }
end,
modules: records.map do |r|
{ mn: r["mn"], mid: r["mid"] }
end,
}
end
推荐阅读
- reactjs - Reactjs - 没有 jquery 的输入掩码
- swiftui - 在 SwiftUI 的 SplitView 中导航到 master 而不是 detail
- python - Django + Chart.js 我这样做对吗?什么都没有被渲染
- java - 为什么我的二维数组乘法的输出不正确?
- python - 在本网站上使用 Scrapy 登录时遇到问题
- reactjs - setInterval 在本机反应中无法与异步功能一起使用
- c# - 访问私有变量
- r - 在 R 中创建唯一的随机组 id
- git - 多种软件配置以及与 STM32CubeIDE/MX、.ioc 和 git 的持续集成工作流程
- python - 抓取 BBB 站点,将 JSON 转换为 DataFrame