我有一个数组:
arr = ["a", "b", "c"]
我想要做的是创建一个Hash,使其看起来像:
{1 => "a", 2 => "b", 3 => c}
我试着这样做:
Hash[arr.each_with_index.map { |item, i| [i => item] }]
但没有得到我想要的东西。
答案 0 :(得分:3)
each_with_index
返回原始接收者。为了得到与原始接收器不同的东西,无论如何都需要map
。因此,无需使用each
或each_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"}