从地图而不是数组获取哈希

时间:2014-08-23 10:10:44

标签: ruby

a = ["ab", "dc", "vv", "dd"]
a.each_with_index.map { |v, i| { ("prefix_" + i.to_s).to_sym => v }}
 => [{:prefix_0=>"ab"}, {:prefix_1=>"dc"}, {:prefix_2=>"vv"}, {:prefix_3=>"dd"}]

我希望将哈希值作为返回值。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

这是一种方式:

a = ["ab", "dc", "vv", "dd"]
Hash[a.map.with_index { |v, i| ["prefix_#{i}".to_sym, v] }]
# => {:prefix_0=>"ab", :prefix_1=>"dc", :prefix_2=>"vv", :prefix_3=>"dd"}

在Ruby 2.1> =中,使用Array#to_h如下: -

a.map.with_index { |v, i| ["prefix_#{i}".to_sym, v] }.to_h

答案 1 :(得分:1)

您可以将枚举器链接在一起,因此另一个选项是这样的:

 a.each_with_index.each_with_object({}) { |(v, i), h| h["prefix_#{i}"] = v }