如何在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
相关产品推荐
相关产品推荐

