我正在构建一个数组,在该数组中,我需要将散列中的所有文件路径组合或合并,其中包含两个值。
输入散列如下所示:
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
它只处理哈希中的一个值,这将在"Apple_HLS“值中生成文件路径。
[["\\\\workspace1\\test-media.m3u8",
"\\\\workspace1\\OTT-1\\segment_1.ts"]]
但我需要组合和合并"Apple_HLS_Prev“的值,并将其包含在数组输出中。我尝试了这段代码,它没有合并这些值,而是显示为空白。
编辑:我期待数组的合并和组合输出,如:
[["\\\\workspace1\\test-media.m3u8",
"\\\\workspace1\\OTT-1\\segment_1.ts",
"\\\\workspace1\\test-media-p.m3u8",
"\\\\workspace1\\OTT-3\\test-media-p.m3u8"]]
希望你能回答。谢谢你们!
发布于 2022-01-30 22:50:46
正如其他人所评论的,你需要展示你真正期望的输出,但我想我理解你在寻找什么。
以下是我认为与您的哈希格式相匹配的散列。
my_hash = {key1: [:key1_value1, :key1_value2],key2: [:key2_value1, :key2_value2], key3: [:key3_value1, :key3_value2]}
要合并所有的值,只需获取值,这将是一个由2个元素数组组成的数组,然后将其压缩到一个数组中。
my_hash.values.flatten
返回:
[:key1_value1, :key1_value2, :key2_value1, :key2_value2, :key3_value1, :key3_value2]
如果您想要保留值对,那么就不要将值扁平化。
my_hash.values
返回:
[[:key1_value1, :key1_value2], [:key2_value1, :key2_value2], [:key3_value1, :key3_value2]]
如果您只想在has中选择一个条目的子集,您可以这样做:
my_hash.select {|k,v| [:key1, :key2].include? k}.values.flatten
返回:
[:key1_value1, :key1_value2, :key2_value1, :key2_value2]
下面的选项不起作用是因为正如您看到的,第一个选择只返回匹配‘Apple_HLS(媒体)’的条目,第二个选择应用于第一个选择的结果,该结果不再包括“Apple_HLS_Prev(媒体)”的条目。
outputs['output_files'] = inputs['output_files_hash'].select{ |k,v| k == 'Apple_HLS(Media)' }.select{ |k,v| k == 'Apple_HLS_Prev(Media)' }.values
虽然我认为上面我发布的内容(使用数组include?
方法)比较干净,但是您可以通过说键应该是Apple_HLS(媒体)或Apple_HLS_Prev(媒体)来得到您想要的东西。
outputs['output_files'] = inputs['output_files_hash'].select{ |k,v| k == 'Apple_HLS(Media)' || k == 'Apple_HLS_Prev(Media)'}.values
但我觉得这更干净:
outputs['output_files'] = inputs['output_files_hash'].select { |k,v| ['Apple_HLS(Media)', 'Apple_HLS_Prev(Media)'].include? k }.values
发布于 2022-02-28 09:55:39
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"
]
}
[h.map {|k, v| v }.flatten]
#=> [["\\\\workspace1\\test-media.m3u8", "\\\\workspace1\\OTT-1\\segment_1.ts", "\\\\workspace1\\test-media-p.m3u8", "\\\\workspace1\\OTT-3\\test-media-p.m3u8"]]
https://stackoverflow.com/questions/70915493
复制相似问题