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

Ruby技术问询:如何将数组中所有哈希的值转换为数组?

解决方案:批量转换数组中哈希的所有值为数组

Hey there! 我明白你的需求啦——要把数组里每个哈希的所有值都转成数组格式,其中逗号分隔的字符串要拆分成多元素数组,还不能硬编码键名对吧?这其实用Ruby的哈希和数组方法就能轻松搞定,我给你一步步讲:

核心思路

我们需要做两件事:

  • 遍历数组里的每一个哈希
  • 对每个哈希的所有键值对做处理:
    • 如果值是逗号分隔的字符串,就分割成数组元素
    • 其他值直接包装成单元素数组

代码实现

首先定义一个处理单个哈希的逻辑,然后用map方法把这个逻辑应用到整个数组的每个元素上:

# 你的原始数据
data = [
  {:status=>"new", :number=>"215", :subject=>"25", :case=>"First", :attachment=>"alpha, beta"},
  {:status=>"old", :number=>"213", :subject=>"21", :case=>"Second", :attachment=>"alpha, beta"}
]

# 定义处理单个哈希的lambda
transform_single_hash = lambda do |hash|
  hash.transform_values do |value|
    # 判断是否是逗号分隔的字符串,是的话分割成数组,否则包装成单元素数组
    if value.is_a?(String) && value.include?(',')
      value.split(/,\s*/).map(&:strip) # 分割后自动去掉元素前后的空格
    else
      [value]
    end
  end
end

# 应用到整个数组
transformed_data = data.map(&transform_single_hash)

效果验证

运行这段代码后,transformed_data的结果就是你想要的:

[
  {:status=>["new"], :number=>["215"], :subject=>["25"], :case=>["First"], :attachment=>["alpha", "beta"]},
  {:status=>["old"], :number=>["213"], :subject=>["21"], :case=>["Second"], :attachment=>["alpha", "beta"]}
]

额外说明

  • 这个方法不需要指定任何固定键名,不管你的哈希里新增或减少什么键,都会自动处理所有值,完全符合你的需求。
  • 如果你的多值字符串有其他分隔符(比如分号),只需要把split(/,\s*/)里的正则改成对应的分隔符即可,比如split(/;\s*/)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:14:38