ruby - 从此数组创建哈希
问题描述
我有一个这样的数组
[["DataSetId", "DataSet-1", "DataSet-1"], ["Did", "DataSet-1", "DataSet-2"], ["Company Name", "Company1", "Company2"]]
我想要一个哈希数组,如下所示
[{"DataSetId"=>"DataSet-1","Did"=>"DataSet-1","Company Name"=>"Company1"},{"DataSetId"=>"DataSet-1","Did"=>"DataSet-2","Company Name"=>"Company2"}]
第一个元素应该是键,数组中的其余元素是值。例如,这里的值可能会增加,键是"Did"
,值是"DataSet-1", "DataSet-2"
。
这里包含三个元素的数组是动态的,它将包含更多元素,例如 ["Did", "DataSet-1", "DataSet-2","DataSet-3","DataSet-4"] 并且将在运行时间。
解决方案
hash.
map { |a| [a.first].product(a[1..-1]) }.
reduce(&:zip).
map { |a| a.flatten.each_slice(2).each_with_object({}) { |(k, v), h| h[k] = v } }
#⇒ [{"DataSetId"=>"DataSet-1", "Did"=>"DataSet-1", "Company Name"=>"Company1"},
# {"DataSetId"=>"DataSet-1", "Did"=>"DataSet-2", "Company Name"=>"Company2"}]
我很确定最后一次转换可能会以更优雅的方式完成,但我不知道如何。
UPD想通了:
hash.
map { |a| [a.first].product(a[1..-1]) }.
reduce(&:zip).
map { |a| Hash[*a.flatten] }
推荐阅读
- css - 背景 CSS 上的斜线
- javascript - 使用 codeceptjs 测试失败后继续
- javascript - babel-register 相对 jsx 导入
- angular - 如何配置http请求来监听java服务获取新数据
- c# - 如何替换for循环中的字符串?
- r - dplyr:通过在两个条件中存在来过滤值
- c# - 每当更新派生类时配置基类属性的自动更新 EF Core 2.0
- java - Spring 表达式语言 (SPEL) 限制对具有给定注释的 bean 字段的访问
- javascript - 显示上的 CSS 过渡:块不起作用
- python - Discord 机器人阅读反应