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

如何使用Ruby按嵌套数组的首元素进行分组?

Ruby实现嵌套数组按首元素分组的解决方案

嘿,这个需求在Ruby里用内置方法就能轻松搞定,下面是具体的实现步骤和代码:

先明确你的输入与目标

原始输入数组

original_array = [
  ["1", "className", "Connection"],
  ["2", "className", "Connection"],
  ["1", "connectorId", "100"],
  ["2", "connectorId", "100"],
  ["1", "part_1", "side_1"],
  ["2", "part_1", "side_1"],
  ["1", "part_2", "bottomPanel_1"],
  ["2", "part_2", "bottomPanel_1"],
  ["1", "transformation", nil],
  ["2", "transformation", nil]
]

期望的分组输出

[
  [["1", "className", "Connection"], ["1", "connectorId", "100"], ["1", "part_1", "side_1"], ["1", "part_2", "bottomPanel_1"], ["1", "transformation", nil]],
  [["2", "className", "Connection"], ["2", "connectorId", "100"], ["2", "part_1", "side_1"], ["2", "part_2", "bottomPanel_1"], ["2", "transformation", nil]]
]

核心实现代码

Ruby的Enumerable#group_by就是专门干分组活儿的,我们只需要指定分组依据为子数组的第一个元素,再提取分组后的集合即可:

# 第一步:按子数组首元素分组,得到一个哈希(key是首元素,value是对应子数组集合)
grouped_data = original_array.group_by { |sub_array| sub_array.first }

# 第二步:提取哈希里的所有value,转换成你要的二维数组格式
final_result = grouped_data.values

# 打印结果验证
puts final_result.inspect

代码说明

  • group_by { |sub_array| sub_array.first }:遍历原始数组的每个子数组,把每个子数组的第一个元素作为分组的“标识”,最终返回一个哈希结构,比如{"1"=>[...所有首元素为1的子数组...], "2"=>[...所有首元素为2的子数组...]}。
  • grouped_data.values:把哈希中的值部分提取出来,直接转换成二维数组,完全符合你的需求。

额外优化(可选)

如果想让每个分组内部的子数组按第二个元素排序(比如按属性名排序),可以再加一步映射操作:

sorted_result = grouped_data.values.map do |group|
  group.sort_by { |sub_array| sub_array[1] }
end

这样每个分组内的子数组就会按第二个元素(比如className、connectorId这些)的字母顺序排列啦~

内容的提问来源于stack exchange,提问作者Marcin Jankowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:02:43