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

Ruby中合并哈希内指定键对应数组元素的技术咨询

如何合并Ruby哈希中指定两个键对应的数组值?

问题描述

我正在构建一个数组,需要合并哈希中两个键对应的所有文件路径。输入哈希如下:

h = { "Apple_HLS(Media)"=>[ "\\\\workspace1\\test-media.m3u8", "\\\\workspace1\\OTT-1\\segment_1.ts" ], "Apple_HLS_Prev(Media)"=>[ "\\\\workspace1\\test-media-p.m3u8", "\\\\workspace1\\OTT-3\\test-media-p.m3u8" ] }

我尝试了以下代码,只能获取单个键对应的值:

outputs['output_files'] = inputs['output_files_hash']. select{ |k,v| k == 'Apple_HLS(Media)' }. values

输出结果为:

[[ "\\\\workspace1\\test-media.m3u8", "\\\\workspace1\\OTT-1\\segment_1.ts" ]]

但我需要将"Apple_HLS_Prev(Media)"对应的值也合并到输出数组中,期望得到的格式是:

[[ "\\\\workspace1\\test-media.m3u8", "\\\\workspace1\\OTT-1\\segment_1.ts", "\\\\workspace1\\test-media-p.m3u8", "\\\\workspace1\\OTT-3\\test-media-p.m3u8" ]]

解决方案

这里有两种简单的方法可以实现你的需求:

方法1:使用values_at + flatten

values_at可以一次性获取多个键对应的值,再用flatten把嵌套数组合并成一维数组,最后包裹一层数组匹配你想要的格式:

# 假设你的哈希是inputs['output_files_hash']
target_keys = ["Apple_HLS(Media)", "Apple_HLS_Prev(Media)"]
# 获取两个键的数组值,合并成一维数组
merged_files = inputs['output_files_hash'].values_at(*target_keys).flatten
# 外层包裹数组得到目标格式
outputs['output_files'] = [merged_files]

方法2:使用select + values + flatten

如果你更习惯用select筛选键,可以先指定目标键列表,筛选出对应键值对后提取值并合并:

target_keys = ["Apple_HLS(Media)", "Apple_HLS_Prev(Media)"]
# 筛选出目标键的键值对,提取值后合并
merged_files = inputs['output_files_hash'].select { |k| target_keys.include?(k) }.values.flatten
outputs['output_files'] = [merged_files]

为什么之前的代码没生效?

你之前的select只匹配了单个键,所以values返回的是包含单个数组的嵌套数组。现在我们扩展了筛选的键范围,再通过flatten把多个数组合并成一个,最后包裹一层数组就完全符合你的预期输出了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:02:44