2016-11-13 19 views
1

値に:代替は、同じキーを使用してハッシュに配列を変換し、私が変換したい

Hash[[:basic, :silver, :gold, :platinum].map { |e| [e, e] }] 
:これまでのところ、私はこれを使用してい

{one: :one, two: :two, three: three} 

[:one, :two, :three] 

しかし、別の方法で可能かどうか知りたいですか?

これは、数値をDBの文字列として保存するために、モデルのRails enum定義で使用します。

答えて

1

私がハングアップに認める:選択肢を考えると、私はハッシュを構築することを好みますアレイと共同作業を作成するのではなく、最初からそれをハッシュに変換します。

[:one, :two, :three].each_with_object({}) { |e,h| h[e]=e } 
    #=> {:one=>:one, :two=>:two, :three=>:three} 
+0

は完全にゼロからハッシュを作成するに同意、私は通常、このような場合にeach_with_object' 'に頼るが、' a.zip(a)はそんなにある.to_h'同じです少ないタイピング:D –

6

Array#zip

a = [:one, :two, :three] 
a.zip(a).to_h 
#=> {:one=>:one, :two=>:two, :three=>:three} 

Array#transpose:ここ

[a, a].transpose.to_h 
#=> {:one=>:one, :two=>:two, :three=>:three} 
1

mapと別の方法である:

>> [:one, :two, :three].map { |x| [x,x] }.to_h 
=> {:one=>:one, :two=>:two, :three=>:three} 
+0

それがすでに持っているものOP :) –

関連する問題