You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby(Rails 7)中按日期分组哈希数组并调整结构

解决方案

你需要遍历原数组的每个哈希,将date字段作为新哈希的键,同时移除原哈希中的date字段,把剩余的键值对作为对应的值,最后将这些新哈希收集成数组即可。

实现代码

my_array = [
  {
    "date" => "2022-12-01",
    "pic" => "Jason",
    "guard" => "Steven",
    "front_desk" => "Emily"
  },
  {
    "date" => "2022-12-02",
    "pic" => "Gilbert",
    "guard" => "Johnny",
    "front_desk" => "Bella"
  },
  {
    "date" => "2022-12-03",
    "pic" => "Steven",
    "guard" => "Gilbert",
    "front_desk" => "Esmeralda"
  }
]

result = my_array.map do |hash|
  date = hash.delete("date")
  { date => hash }
end

# 输出结果即为目标结构
p result

代码说明

  • map方法遍历原数组的每个元素,返回一个新数组,每个元素是处理后的哈希。
  • hash.delete("date")会移除原哈希中的date键并返回对应值,这个值作为新哈希的键。
  • 去掉date后的原哈希,就是新哈希对应的值,最终组成{ 日期 => 剩余键值对 }的结构。

为什么group_by不适用?

你之前用的group_by { |element| element["date"] }.values,会得到嵌套数组的结构(每个日期对应一个包含单个原哈希的数组),比如:

[
  [{"date"=>"2022-12-01", "pic"=>"Jason", ...}],
  [{"date"=>"2022-12-02", "pic"=>"Gilbert", ...}],
  ...
]

这和你需要的「每个元素是单个哈希」的结构不符。你的数据中每个日期都是唯一的,不需要分组聚合,只需要做结构转换,因此group_by不适合这个场景。

内容的提问来源于stack exchange,提问作者K. Wardhana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:25:10