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

如何实现Ruby哈希反转:将值元素映射至对应原键集合

Ruby哈希反转:将值中的元素映射到原键集合

给定如下Ruby哈希:

a = {
  7 => [1469, 2283],
  5 => [1469, 5464],
  3 => [7561],
  6 => [7952, 8114],
  4 => []
}

需要将哈希值中的每个数字映射到其所在的原键集合,得到目标哈希:

b = {
  1469 => [7,5],
  2283 => [7],
  5464 => [5],
  7561 => [3],
  7952 => [6],
  8114 => [6]
}

简洁高效的实现方法

方法一:遍历构建(直观高效)

b = a.each_with_object({}) do |(key, values), result|
  values.each { |num| (result[num] ||= []) << key }
end
  • 逻辑:遍历原哈希的每一对键值,对值数组中的每个数字,在结果哈希中初始化或追加对应的原键。
  • 优势:直接在遍历过程中构建结果,内存占用低,自动忽略空数组(空数组不会进入内层循环)。

方法二:链式调用(写法紧凑)

b = a.flat_map { |k, vs| vs.map { |v| [v, k] } }
     .group_by(&:first)
     .transform_values { |arr| arr.map(&:second) }
  • 逻辑:先将原哈希转换为[数字, 原键]的二维数组,再按数字分组,最后提取分组中的原键组成目标数组。
  • 优势:代码简洁,符合Ruby链式调用的风格,可读性强。

两种方法都能高效完成需求,可根据个人编码习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:50:34