2011-10-20 33 views
1

この動作は混乱します。この作業を行うために配列を分割する必要がありますか?ハッシュへの配列変換

pry(main)> ary = ["foo", "bar"] 
=> ["foo", "bar"] 

pry(main)> Hash[ary] 
=> {"f"=>"o", "b"=>"a"} 

pry(main)> Hash["foo", "bar"] 
=> {"foo"=>"bar"} 

pry(main)> Hash[["foo", "bar"]] 
=> {"f"=>"o", "b"=>"a"} 

pry(main)> Hash[ary.split(",")] 
=> {"foo"=>"bar"} 
+0

ルビ1.9では、例1と3は空の配列になります。 – steenslag

+0

これらの例はすべてRuby 1.9.3devにあります –

答えて

3

上記の試行1と3は同等です。コンストラクタに1つの1次元配列を渡しますが、これは正しくありません。

あなたが期待するとして、あなたは別の引数としてパラメータを渡す必要があり、またはペアの2次元配列としてだろう、これが機能するために>

# Split the array into args (equivalent to example #2 above) 
# equivalent to Hash[key1, val1, key2, val2] 
Hash[*ary] 

# or wrap the array in another array (an array of nested pairs) 
# equivalent to Hash[[[key1,val1],[key2,val2]]] 
Hash[[ary]] 

あなたが見ている不正な動作があるためと考えられますコンストラクタは長さ2の配列の配列を期待していますが、文字列の配列を渡しています。それはarg[0]を各ペアのキーと解釈し、値としてarg[1]、この場合はfおよびo,bおよびaと解釈します。

関連する問題