Arrays 将两个数组转换为哈希对数组

Arrays 将两个数组转换为哈希对数组,arrays,ruby,hash,Arrays,Ruby,Hash,我有两个阵列: dates = [1,2,3] values = [10,20,30] 我怎样才能这样组合它们 [{date:1,value:10},{date:2,value:20}...etc] 另一种方法是: dates.each_with_index.map{|d,i| {:date=>d,:value=>values[i]}} # => [{:date=>1, :value=>10}, {:date=>2, :value=>20}, {:d

我有两个阵列:

dates = [1,2,3]
values = [10,20,30]
我怎样才能这样组合它们

[{date:1,value:10},{date:2,value:20}...etc]

另一种方法是:

dates.each_with_index.map{|d,i| {:date=>d,:value=>values[i]}}
# => [{:date=>1, :value=>10}, {:date=>2, :value=>20}, {:date=>3, :value=>30}]

解决方案

dates = [1,2,3]
values = [10,20,30]

h = ([:date].product(dates)).zip([:value].product(values)).collect(&:to_h)
p h
输出

[{:date=>1, :value=>10}, {:date=>2, :value=>20}, {:date=>3, :value=>30}]

附言: 虽然上面的输出看起来不同,但它和您期望的一样——一个Ruby哈希。见下面的证据

产生

[{:date=>1, :value=>10}, {:date=>2, :value=>20}]


我觉得你看起来好多了。嗯
…etc
保存12个字符。
p [{date:1,value:10},{date:2,value:20}] # This is what you want
[{:date=>1, :value=>10}, {:date=>2, :value=>20}]