【发布时间】:2016-05-08 03:27:34
【问题描述】:
我有一个排序的二维数组,如下所示:
a = [[1, 2011], [3, 1999], [4, 2014], [6, 1998], ...]
如何将其转换为以年份为键、前面为数字的哈希值?
{2011 => 1, 1999 => 3, 2014 => 4, 1998 => 6, ...}
【问题讨论】:
标签: ruby multidimensional-array hash ruby-1.8.7
我有一个排序的二维数组,如下所示:
a = [[1, 2011], [3, 1999], [4, 2014], [6, 1998], ...]
如何将其转换为以年份为键、前面为数字的哈希值?
{2011 => 1, 1999 => 3, 2014 => 4, 1998 => 6, ...}
【问题讨论】:
标签: ruby multidimensional-array hash ruby-1.8.7
[[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)]
【讨论】:
x.to_h 可以替换为Hash[x]。
nil。
以下是对 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(又名merge!)可以替换为Hash#merge。
【讨论】:
这是另一种方法。
a.each.with_object({}) {|(v,k), h| h[k] = v}
【讨论】: