将二维数组转换为哈希

Transform 2D array into hash

我有一个排序的二维数组如下:

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

如何将其转换为以年份为键、以前面的数字为值的散列?

{2011 => 1, 1999 => 3, 2014 => 4, 1998 => 6, ...}
[[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.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}

Hash#update (aka merge!) could be replaced with Hash#merge.

还有一种方法。

a.each.with_object({}) {|(v,k), h| h[k] = v}