2013-01-09 85 views
1

我有一个数组。作为例子:使用数组作为键并生成值来生成散列

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

我想将其转换为一个哈希:

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

我想出了以下方法:

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

我与Ruby的经验十分有限,但有一个感觉应该有这样的模拟方式。主要是,我对降低代码复杂性感兴趣。

回答

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) }] 
+1

'哈希[a.zip([* 0..50]。样品(3))]' –

+0

@YevgeniyAnfilofyev好一个! – Kyle