是否有更优雅的方法将此数组转换为哈希?

时间:2015-07-23 05:52:59

标签: arrays ruby hash

所以我有一个嵌套数组,我想将它转换为一个哈希,使公共键指向一个值数组。这就是我所拥有的:

 b=[[6, "Jet"], [0, "Fuel"], [0, "Engine"]]
 c={}
 b.map { |x| c[x[0]] ||= []; c[x[0]] << x[1] }

 => {6=>["Jet"], 0=>["Fuel", "Engine"]}

是否有更惯用的方式来做到这一点?

2 个答案:

答案 0 :(得分:3)

地图可以修改如下。差别不大,但没有position+""

;

注意:b.map { |x| (c[x[0]] ||= []) << x[1] } 更适合此处。

答案 1 :(得分:1)

我不知道这是否更具惯用性,但我觉得使用the Hash constructor that takes a block更具可读性:

c = Hash.new { |h, k| h[k] = [] }
b.each { |k, v| c[k] << v }

结果存储在ctest)。