web-dev-qa-db-ja.com

キーの配列からハッシュを作成する

SO=)で他の質問を確認しましたが、私の特定の問題に対する回答は見つかりませんでした。

私は配列を持っています:

a = ["a", "b", "c", "d"]

この配列をハッシュに変換したいのですが、配列の要素がハッシュのキーになり、すべて同じ値で1と表示されます。つまり、ハッシュは次のようになります。

{"a" => 1, "b" => 1, "c" => 1, "d" => 1}
28
Dennis Mathews

私の解決策、とりわけ:-)

a = ["a", "b", "c", "d"]
h = Hash[a.map {|x| [x, 1]}]
58
Baldrick

product を使用できます:

a.product([1]).to_h
#=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1}

または、 transpose メソッドを使用することもできます:

[a,[1] * a.size].transpose.to_h
#=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1}
19
potashin
a = ["a", "b", "c", "d"]

必要な出力を実現する4つのオプション:

h = a.map{|e|[e,1]}.to_h
h = a.Zip([1]*a.size).to_h
h = a.product([1]).to_h
h = a.Zip(Array.new(a.size, 1)).to_h

これらすべてのオプションは Array#to_h に依存し、Ruby v2.1以降で利用可能

4
a = %w{ a b c d e }

Hash[a.Zip([1] * a.size)]   #=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1, "e"=>1}
4
coreyward

ここに:

theHash=Hash[a.map {|k| [k, theValue]}]

これは、上記の例でa=['a', 'b', 'c', 'd']とそのtheValue=1

2
Linuxios
["a", "b", "c", "d"].inject({}) do |hash, elem|
  hash[elem] = 1
  hash
end
2
Andrew Marshall
a = ["a", "b", "c", "d"]
h = a.inject({}){|h,k| h[k] = 1; h}
#=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1}
0
Sandip Ransing
{}.tap{|h| %w(a b c d).each{|x| h[x] = 1}}
0
Fumisky Wells
a = ['1','2','33','20']

Hash[a.flatten.map{|v| [v,0]}.reverse]
0
Qmr