使用数组作为键并生成值以生成哈希

时间:2013-01-09 19:12:21

标签: ruby

我有一个数组。例如:

a = ["foo", "bar", "baz"]

我想将其转换为哈希:

h = { "foo" => randomvalue1, "bar" => randomvalue2, "baz" => randomvalue3 }

我想出了以下方式:

Hash[* a.map { |value| [value, randomvalue_generator] }.flatten]

我对Ruby的体验非常有限,但我觉得应该采用simler的方式来做到这一点。主要是,我对降低代码复杂性感兴趣。

1 个答案:

答案 0 :(得分:1)

除非您不需要flattensplat

,否则您的方式很好
a = ["foo", "bar","baz"]
Hash[a.map{ |k| [k, rand(5)] }]
# {"foo"=>1, "bar"=>0, "baz"=>2} 

还有很多其他方法可以实现这一目标,但我喜欢你原来的解决方案。

a.each_with_object({}){ |k, h| h[k] = rand(5) }

a.inject({}){ |h, k| h[k] = rand(5); h }

a.inject({}){ |h, k| h.merge k => rand(5) }

Hash[a.zip a.map{ |_| rand(5) }]