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

求助:如何将Ruby哈希数组按'g'值进行分组

解决Ruby哈希数组按"g"键分组的问题

你想要的分组功能其实Ruby已经给我们准备好了现成的方法——Enumerable#group_by,比你手动去遍历唯一值再筛选要简洁高效得多,具体实现步骤如下:

步骤1:定义原数组

首先先把你的原始哈希数组定义好:

original_array = [{"g"=>1, "f"=>"01"}, {"g"=>2, "f"=>"02"}, {"g"=>2, "f"=>"03"}, {"g"=>3, "f"=>"04"}, {"g"=>4, "f"=>"05"}, {"g"=>4, "f"=>"06"}]

步骤2:使用group_by按"g"分组

调用group_by方法,传入一个块来指定分组的依据是每个哈希的"g"值:

grouped_result = original_array.group_by { |hash| hash["g"] }

这时候你会得到一个键为"g"的取值,值为对应分组数组的哈希:

{
  1 => [{"g"=>1, "f"=>"01"}],
  2 => [{"g"=>2, "f"=>"02"}, {"g"=>2, "f"=>"03"}],
  3 => [{"g"=>3, "f"=>"04"}],
  4 => [{"g"=>4, "f"=>"05"}, {"g"=>4, "f"=>"06"}]
}

步骤3:提取分组后的数组集合

如果你只需要分组后的数组列表(也就是你给出的预期结果格式),直接取这个哈希的values即可:

final_groups = grouped_result.values

输出的final_groups就是你想要的结果:

[
  [{"g"=>1, "f"=>"01"}],
  [{"g"=>2, "f"=>"02"}, {"g"=>2, "f"=>"03"}],
  [{"g"=>3, "f"=>"04"}],
  [{"g"=>4, "f"=>"05"}, {"g"=>4, "f"=>"06"}]
]

关于你之前尝试的方法

你之前用a.map{|a| a['g']}.uniq获取唯一值再遍历select的思路其实是可行的,大概率是代码里的变量名冲突或者逻辑细节出了问题(比如遍历的时候用了和原数组同名的变量)。不过相比之下,group_by是Ruby专门为这类分组场景设计的方法,代码更简洁可读性也更高,非常推荐使用。

内容的提问来源于stack exchange,提问作者Antonio Cipolla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:18:02