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

Ruby哈希数组如何将phase值转为新键、取quantity值为新值重构

Ruby哈希数组指定结构转换实现

核心处理逻辑很简单,遍历原数组的每个哈希元素,按需重构哈希结构即可,没有额外依赖。

通用兼容写法(全Ruby版本支持)

直接通过map遍历数组,逐个构造符合要求的新哈希:

original_array = [
  {:ID => "aaa", :phase => "alpha", :quantity => 80},
  {:ID => "aaa", :phase => "beta", :quantity => 160}
]

converted_array = original_array.map do |hash_item|
  {
    :ID => hash_item[:ID],
    hash_item[:phase].to_sym => hash_item[:quantity]
  }
end

处理逻辑说明:

  • 用map替代each,直接返回转换后的新数组,不用手动追加元素
  • 新哈希里显式保留原:ID键值对
  • 取当前元素:phase的字符串值,转成Symbol类型作为新键,对应值取同元素下:quantity的数值
  • 新哈希不包含原:phase、:quantity键,自然完成冗余键的移除

简洁写法(Ruby 2.5+版本支持)

如果你的运行环境是Ruby 2.5及以上,可以用Hash#slice先截取需要保留的:ID键,再合并动态生成的键值对,代码更凝练:

converted_array = original_array.map do |hash_item|
  hash_item.slice(:ID).merge(hash_item[:phase].to_sym => hash_item[:quantity])
end

两种写法运行后得到的converted_array结构完全符合要求:

[
  {:ID=>"aaa", :alpha=>80},
  {:ID=>"aaa", :beta=>160}
]

小提示:如果:phase对应的字符串包含空格、特殊符号,转Symbol的逻辑依然生效,生成的键格式会是:"带空格的phase值",符合Ruby符号键的语法规范。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:54:20