首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数组中合并和组合哈希值

在数组中合并和组合哈希值
EN

Stack Overflow用户
提问于 2022-01-30 14:17:40
回答 2查看 417关注 0票数 1

我正在构建一个数组,在该数组中,我需要将散列中的所有文件路径组合或合并,其中包含两个值。

输入散列如下所示:

代码语言:javascript
运行
复制
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"
      ]
    }

我试过这个代码:

代码语言:javascript
运行
复制
outputs['output_files'] =
  inputs['output_files_hash'].
  select{ |k,v| k == 'Apple_HLS(Media)' }.
  values

它只处理哈希中的一个值,这将在"Apple_HLS“值中生成文件路径。

代码语言:javascript
运行
复制
[["\\\\workspace1\\test-media.m3u8",
  "\\\\workspace1\\OTT-1\\segment_1.ts"]]

但我需要组合和合并"Apple_HLS_Prev“的值,并将其包含在数组输出中。我尝试了这段代码,它没有合并这些值,而是显示为空白。

编辑:我期待数组的合并和组合输出,如:

代码语言:javascript
运行
复制
[["\\\\workspace1\\test-media.m3u8",
  "\\\\workspace1\\OTT-1\\segment_1.ts",
  "\\\\workspace1\\test-media-p.m3u8",
  "\\\\workspace1\\OTT-3\\test-media-p.m3u8"]]

希望你能回答。谢谢你们!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-30 22:50:46

正如其他人所评论的,你需要展示你真正期望的输出,但我想我理解你在寻找什么。

以下是我认为与您的哈希格式相匹配的散列。

代码语言:javascript
运行
复制
my_hash = {key1: [:key1_value1, :key1_value2],key2: [:key2_value1, :key2_value2], key3: [:key3_value1, :key3_value2]} 

要合并所有的值,只需获取值,这将是一个由2个元素数组组成的数组,然后将其压缩到一个数组中。

代码语言:javascript
运行
复制
my_hash.values.flatten

返回:

代码语言:javascript
运行
复制
[:key1_value1, :key1_value2, :key2_value1, :key2_value2, :key3_value1, :key3_value2]

如果您想要保留值对,那么就不要将值扁平化。

代码语言:javascript
运行
复制
my_hash.values

返回:

代码语言:javascript
运行
复制
[[:key1_value1, :key1_value2], [:key2_value1, :key2_value2], [:key3_value1, :key3_value2]] 

如果您只想在has中选择一个条目的子集,您可以这样做:

代码语言:javascript
运行
复制
my_hash.select {|k,v| [:key1, :key2].include? k}.values.flatten

返回:

代码语言:javascript
运行
复制
[:key1_value1, :key1_value2, :key2_value1, :key2_value2]

下面的选项不起作用是因为正如您看到的,第一个选择只返回匹配‘Apple_HLS(媒体)’的条目,第二个选择应用于第一个选择的结果,该结果不再包括“Apple_HLS_Prev(媒体)”的条目。

代码语言:javascript
运行
复制
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(媒体)来得到您想要的东西。

代码语言:javascript
运行
复制
outputs['output_files'] = inputs['output_files_hash'].select{ |k,v| k == 'Apple_HLS(Media)' || k == 'Apple_HLS_Prev(Media)'}.values

但我觉得这更干净:

代码语言:javascript
运行
复制
outputs['output_files'] = inputs['output_files_hash'].select { |k,v| ['Apple_HLS(Media)', 'Apple_HLS_Prev(Media)'].include? k }.values
票数 2
EN

Stack Overflow用户

发布于 2022-02-28 09:55:39

代码语言:javascript
运行
复制
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"]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70915493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档