Ruby:转换数组中的对象后传递键/值

2024-01-04

给定数据:

data = [
 {"id":14, "sort":1, "content":"9", foo: "2022"},
 {"id":14, "sort":4, "content":"5", foo: "2022"},
 {"id":14, "sort":2, "content":"1", foo: "2022"},
 {"id":14, "sort":3, "content":"0", foo: "2022"},
 {"id":15, "sort":4, "content":"4", foo: "2888"},
 {"id":15, "sort":2, "content":"1", foo: "2888"},
 {"id":15, "sort":1, "content":"3", foo: "2888"},
 {"id":15, "sort":3, "content":"3", foo: "2888"},
 {"id":16, "sort":1, "content":"8", foo: "3112"},
 {"id":16, "sort":3, "content":"4", foo: "3112"},
 {"id":16, "sort":2, "content":"4", foo: "3112"},
 {"id":16, "sort":4, "content":"9", foo: "3112"}
]

得到了他们连接的内容sort and ids with:

formatted = data.group_by { |d| d[:id]}.transform_values do |value_array|
  value_array.sort_by { |b| b[:sort] }
             .map     { |c| c[:content] }.join
end

puts formatted
#=> {14=>"9105", 15=>"3134", 16=>"8449"}

我知道foo存在于里面value_array但想知道我怎样才能包括foo存在于formatted变量,以便我可以映射它以获得所需的输出,或者是否可能?

期望的输出:

[
 {"id":14, "concated_value":"9105", foo: "2022"},
 {"id":15, "concated_value":"3134", foo: "2888"},
 {"id":16, "concated_value":"8449", foo: "3112"}
]

Since :foo是独一无二的:id。您可以按如下方式执行此操作:

data.group_by {|h| h[:id]}.map do |_,sa| 
  sa.map(&:dup).sort_by {|h| h.delete(:sort) }.reduce do |m,h| 
     m.merge(h) {|key,old,new| key == :content ? old + new : old } 
  end.tap {|h| h[:concated_value] = h.delete(:content) }
end  
#=> [
# {"id":14, foo: "2022", "concated_value":"9105"},
# {"id":15, foo: "2888", "concated_value":"3134"},
# {"id":16, foo: "3112", "concated_value":"8449"}
# ]
  • 首先我们按 id 分组。group_by {|h| h[:id]}
  • 然后我们复制组中的哈希值(以免破坏原始哈希值)。map(&:dup)
  • 然后我们按so​​rt排序,同时删除。.sort_by {|h| h.delete(:sort) }
  • 然后我们将组合并在一起并仅连接内容键。m.merge(h) {|key,old,new| key == :content ? old + new : old }
  • 然后我们只需更改密钥content to concated_value tap {|h| h[:concated_value] = h.delete(:content) }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby:转换数组中的对象后传递键/值 的相关文章

随机推荐

  • 如何在 sbt shell 中设置子项目的设置(不使用项目命令)?

    在 sbt shell 中如何设置子项目 我知道我可以project subproject then set key value 但我不想一直切换项目 理想情况下 与以下内容没有太大不同 set key in subproject valu
  • 淘汰ViewModel基类,Javascript继承

    我最近在很多项目中使用了 Knockout js 并且编写了很多重复的代码 我希望能够定义一个BaseViewModel类并让我的特定于页面的 ViewModel 继承它 我对 Javascript 如何做到这一点有点困惑 这是我的基本Ba
  • 在用户睡觉时处理我的 BLE 监控应用程序上的 Android-Doze 模式

    我制作了一个在睡眠时间监控人的健康状况的设备 它通过 BLE 连接到智能手机 它与 iOS 应用程序配合得很好 但自从 Android 世界出现 Doze 模式以来 这真的很难处理 因为我的设备在他的睡眠时间工作 主要功能是它可以检测特定的
  • 如何在 Rails 中建模“喜欢”?

    我有 3 个模型 用户 对象 喜欢 目前 我有这样的模型 一个用户有很多对象 我该如何进行建模 1 一个用户可以喜欢很多对象 2 一个对象可以有很多喜欢 来自不同的用户 所以我希望能够做这样的事情 User likes 用户喜欢的对象列表
  • 将 jar 添加到 maven exec:java classpath

    我有一个批处理文件 它使用依赖于tools jar 来自JDK 的maven 运行java 类 例如 mvn f pom xml e exec java Dfile encoding UTF 8 Dexec mainClass MyClas
  • 按元素过滤 XML [重复]

    这个问题在这里已经有答案了
  • omp 的行为对嵌套并行级别至关重要

    考虑以下场景 函数A创建一层OMP并行区域 每个OMP线程调用函数B 函数B本身包含另一层OMP并行区域 那么 如果在函数 B 的并行区域内 存在一个 OMP 临界区域 那么 该区域对于函数 A 和 B 创建的所有线程来说是 全局 临界的
  • istio:VirtualService 重写为根 url

    我有一个 Istio 1 4 6 VirtualService 其匹配项和 url 重写定义如下 match authority prefix example com uri prefix foo bar rewrite uri route
  • (-) MonthBegin 的 Pandas 日期时间锚定偏移量无法按预期工作

    我需要回到月初 但如果我已经在月初 我想留在那里 Pandas 锚定偏移量 n 0 应该正是这样做的 但它不会在 MonthBegin 的锚定点之间产生预期结果 例如对于这个pd Timestamp 2017 01 06 00 00 00
  • 如何将变量中的列表附加到 R 中数据帧的特定行中的列表?

    我创建了一个 RMarkdown 来检查错误 其输出print指定错误以及需要更正哪些行号的语句 这将检查df以下 我创建了另一个数据框 df index在下面的示例中 来跟踪每列需要更正的行 即df 本质上 我需要添加一个列来存储需要为每
  • 如何从intent中获取文件名?

    这是我的清单文件 使用意图过滤器后 我从邮件附件下载 ics 文件 当我打开下载的文件时 它会启动我的应用程序 我需要获取应用程序中所选文件的文件名和数据 我应该在清单和java文件中做什么 我对 Android 很陌生 有人可以帮助我吗
  • 为什么我的 create-react-app 显示 README.md,而不是 index.html?

    为什么我的 create react app 显示 README md 而不是 index html 我已经运行 npm run build gt yarn run deploy 多次检查文件结构并阅读 gh pages 文档 找不到任何其
  • Angular 7+:将静态 html 文件注入组件视图中间

    我无法找到将文件中的静态 html 注入视图中间的最佳方法 我有一个名为 eula dialog 的组件 其中该组件尚未执行任何操作 但视图如下所示 eula dialog component html h1 Sign EULA h1
  • 持续集成、持续交付、持续部署

    这三个术语有什么区别 我的大学提供了以下定义 持续集成基本上只是意味着开发人员的工作副本每天与共享主线同步多次 持续交付被描述为持续集成的逻辑演变 始终能够将产品投入生产 持续部署被描述为持续交付后合乎逻辑的下一步 只要产品通过 QA 就自
  • 计算任意大整数的整数平方根 (isqrt) 的有效算法

    Notice 对于解决方案Erlang or C C go to Trial 4 below 维基百科文章 整数平方根 http en wikipedia org wiki Integer square root 整数平方根 的定义可以在这
  • 请求的 JSON 解析失败

    由于某种原因 下面的 ajax 代码存在解析错误 我怎样才能找出它是什么 和 或有人能看到出了什么问题吗 listElements sortable revert true update function event ui var orde
  • 我是否必须切换到 https 才能在 Chrome 92 中使用“SharedArrayBuffer”?

    我的网站不适用于 Chrome 92 使用 Chrome 91 一切都很好 问题是SharedArrayBuffer自 Chrome 92 起未启用 当我尝试通过添加标题 Cross Origin Embedder Policy requr
  • 从命令行创建新的 Visual Studio 解决方案

    有没有办法使用 devenv 从我制作的多项目模板创建新的 Visual Studio 解决方案 有很多关于使用命令行构建的资源 但我似乎找不到任何关于创建新解决方案的信息 我希望能够从我制作的代码生成器的模板中打开一个新的解决方案 以便我
  • 无法通过 USB 将计算机时间同步到 Arduino

    我想将时间从我的电脑同步到arduino 我正在使用他们的时间库 但它不起作用 如何让arduino与我的电脑上的时间相同 我目前使用的是Mac 他们的文件说 在unix系统上 可以使用shell命令设置时间 TZ adjust 8 ech
  • Ruby:转换数组中的对象后传递键/值

    给定数据 data id 14 sort 1 content 9 foo 2022 id 14 sort 4 content 5 foo 2022 id 14 sort 2 content 1 foo 2022 id 14 sort 3 c