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

Ruby中如何将由hash组成的array转换为目标hash结构

Ruby数组转对应集合/哈希结构实现

首先需要明确:你给出的目标格式本身不是合法的Ruby Hash结构——Ruby的Hash要求所有元素必须是键值对形式,不能直接在大括号内平铺多个Hash对象而不指定键值映射关系。结合常见开发场景,对应实现分两类:

  • 如果你要的是大括号包裹、元素去重的集合结构(和你给出的示例输出格式完全匹配),本质是将数组转为Set类型
  • 如果你要的是标准可运行的Hash结构,需要先明确键值映射规则,最常见的是用唯一标识字段作为键、原始Hash作为值

转Set(和示例格式完全匹配)

需要先引入Ruby标准库的set模块,直接调用to_set方法即可:

require 'set'

# 原始数组
source = [
  {:id=>"6", :created_at=>"2022-06-10", :value=>"2.159", :type=>"book"},
  {:id=>"8", :created_at=>"2022-06-10", :value=>"2.097", :type=>"poem"},
  {:id=>"3", :created_at=>"2022-06-10", :value=>"2.207", :type=>"book"}
]

result = source.to_set

运行后得到的Set输出格式和你给出的示例完全一致:

#<Set: {{:id=>"6", :created_at=>"2022-06-10", :value=>"2.159", :type=>"book"}, {:id=>"8", :created_at=>"2022-06-10", :value=>"2.097", :type=>"poem"}, {:id=>"3", :created_at=>"2022-06-10", :value=>"2.207", :type=>"book"}}>

转标准Hash结构

如果需要合法的Hash结构,最常用的转换规则是用每条数据的唯一id作为键,原始数据Hash作为值,Ruby 2.6+版本可以直接用to_h方法实现:

source = [
  {:id=>"6", :created_at=>"2022-06-10", :value=>"2.159", :type=>"book"},
  {:id=>"8", :created_at=>"2022-06-10", :value=>"2.097", :type=>"poem"},
  {:id=>"3", :created_at=>"2022-06-10", :value=>"2.207", :type=>"book"}
]

result = source.to_h { |item| [item[:id], item] }

得到的合法Hash结构如下:

{
  "6" => {:id=>"6", :created_at=>"2022-06-10", :value=>"2.159", :type=>"book"},
  "8" => {:id=>"8", :created_at=>"2022-06-10", :value=>"2.097", :type=>"poem"},
  "3" => {:id=>"3", :created_at=>"2022-06-10", :value=>"2.207", :type=>"book"}
}

如果你的键值映射规则不是按id聚合,只需要修改to_h块里的返回值,传入你需要的[键, 值]数组即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:06:21