1

私は配列を持っています。例として:

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

それをハッシュに変換したい:

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

私は次の方法を思いつきます:

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

私のRubyの経験はかなり限られていますが、これを行うためのより簡単な方法があるはずだと感じています. 主に、コードの複雑さを軽減することに関心があります。

4

1 に答える 1

1

flattenする必要がないことを除いて、あなたのやり方は問題ありません。splat

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) }]
于 2013-01-09T19:22:34.213 に答える