我有一个像这样的数组
[["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”],在运行时确定。
答案 0 :(得分:2)
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] }