使用each_with_index从散列创建数组

时间:2013-07-17 08:34:28

标签: ruby

我有一个数组:

arr = ["a", "b", "c"]

我想要做的是创建一个Hash,使其看起来像:

{1 => "a", 2 => "b", 3 => c}

我试着这样做:

Hash[arr.each_with_index.map { |item, i|  [i => item] }]

但没有得到我想要的东西。

3 个答案:

答案 0 :(得分:3)

each_with_index返回原始接收者。为了得到与原始接收器不同的东西,无论如何都需要map。因此,无需使用eacheach_with_index执行额外步骤。此外,with_index可选择采用初始索引。

Hash[arr.map.with_index(1){|item, i| [i, item]}]
# => {1 => "a", 2 => "b", 3 => c}

答案 1 :(得分:1)

Hash[]将数组数组作为参数。因此,您需要使用[i, item]代替[i => item]

arr = ["a", "b", "c"]
Hash[arr.each_with_index.map{|item, i| [i+1, item] }]
#=> {1=>"a", 2=>"b", 3=>"c"}

只是为了澄清:[i => item]与编写[{i => item}]相同,所以你真的产生了一个数组,每个数组都包含一个哈希。

我还在索引中添加了+1,因此哈希键会根据您的请求从1开始。如果您不在乎或者想要从0开始,请将其关闭。

答案 2 :(得分:0)

arr = ["a", "b", "c"]
p Hash[arr.map.with_index(1){|i,j| [j,i]}]
# >> {1=>"a", 2=>"b", 3=>"c"}