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

Ruby中按Hash数组指定位置值分组的实现方法

Ruby哈希按值数组指定位置元素分组的高效实现

可以用Ruby内置的group_by和transform_values方法高效实现,不需要手动维护额外数组或嵌套结构,单次遍历即可完成分组。

针对你给出的具体哈希,按数组第二个元素(索引为1)分组的代码如下:

original_hash = {
  key1: ["Cop", "dog", "house"],
  key2: ["doctor", "cat", "apartment"],
  key3: ["Chef", "dog", "house"],
  key4: ["Cop", "cat", "apartment"]
}

# 指定要分组的数组位置(第二个元素对应索引1)
group_position = 1

# 执行分组并整理结果
grouped_hash = original_hash.group_by do |original_key, value_arr|
  # 将分组依据的字符串转为符号,匹配预期输出的key格式
  value_arr[group_position].to_sym
end.transform_values do |key_value_pairs|
  # 提取每组中的原哈希key
  key_value_pairs.map(&:first)
end

# 输出结果
p grouped_hash
# => {:dog=>[:key1, :key3], :cat=>[:key2, :key4]}

关键说明:

  • group_by:Ruby内置方法,仅遍历原哈希一次,按指定规则将键值对分组,返回的哈希以分组依据为key,对应原键值对数组为value,效率极高。
  • transform_values:遍历分组后的哈希值,将每个组的键值对数组转换为原哈希的key数组,完成结果整理。
  • 灵活性:只需修改group_position的值,就能按数组任意位置的元素分组(比如按第一个元素分组就设为0)。

这个实现的时间复杂度为O(n)(n为原哈希的键值对数量),完全符合你对效率的要求,没有多余的数组嵌套操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:05:29