J'ai examiné d'autres questions dans SO et je n'ai pas trouvé de réponse à mon problème spécifique.
J'ai un tableau:
a = ["a", "b", "c", "d"]
Je veux convertir ce tableau en un hachage où les éléments du tableau deviennent les clés du hachage et où ils ont la même valeur.
{"a" => 1, "b" => 1, "c" => 1, "d" => 1}
Ma solution, une parmi les autres :-)
a = ["a", "b", "c", "d"]
h = Hash[a.map {|x| [x, 1]}]
a = ["a", "b", "c", "d"]
4 autres options pour obtenir le résultat souhaité:
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
Toutes ces options reposent sur Array # to_h , disponible dans Ruby v2.1 ou supérieur
a = %w{ a b c d e }
Hash[a.Zip([1] * a.size)] #=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1, "e"=>1}
Ici:
theHash=Hash[a.map {|k| [k, theValue]}]
Cela suppose que, selon votre exemple ci-dessus, a=['a', 'b', 'c', 'd']
et theValue=1
.
["a", "b", "c", "d"].inject({}) do |hash, elem|
hash[elem] = 1
hash
end
a = ["a", "b", "c", "d"]
h = a.inject({}){|h,k| h[k] = 1; h}
#=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1}
{}.tap{|h| %w(a b c d).each{|x| h[x] = 1}}
a = ['1','2','33','20']
Hash[a.flatten.map{|v| [v,0]}.reverse]