2011-10-20 74 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是等效的,並傳遞一個一個維陣列的構造,這是不正確的。

對於這個工作,你期望的那樣,你需要傳遞的參數作爲單獨的參數,或者作爲對的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]解釋爲值,在此情況下爲fo,ba