将2D数组转换为哈希

时间:2016-01-30 10:36:10

标签: ruby multidimensional-array hash ruby-1.8.7

我有一个排序的2D数组如下:

a = [[1, 2011], [3, 1999], [4, 2014], [6, 1998], ...]

如何将此转换为哈希,键为年份,值为前面的数字?

{2011 => 1, 1999 => 3, 2014 => 4, 1998 => 6, ...}

3 个答案:

答案 0 :(得分:2)

[[1, 2011], [3, 1999], [4, 2014], [6, 1998]].map(&:reverse).to_h
  # => {2011=>1, 1999=>3, 2014=>4, 1998=>6}

对于旧版本的Ruby,您可以使用:

Hash[a.map(&:reverse)]

答案 1 :(得分:1)

以下是其他几种应该是1.8.7友好的方法:

a = [[1, 2011], [3, 1999], [4, 2014], [6, 1998]]

v, y = a.transpose
Hash[y.zip(v)]
  #=> {2011=>1, 1999=>3, 2014=>4, 1998=>6}

a.reduce({}) { |h,(v,y)| h.update({ y=>v }) }
  #=> {2011=>1, 1999=>3, 2014=>4, 1998=>6}

enter image description here(又名merge!)可以替换为Hash#update

答案 2 :(得分:0)

这是另一种方式。

prop()