2010-05-06 62 views
1

我想將3個數組壓縮成一個散列。儘管如此,哈希值已經空了。下面是示例代碼使用Ruby 1.9重現:爲什麼這個Ruby 1.9代碼導致一個空的散列?

>> foo0 = ["a","b"] 
=> ["a", "b"] 
>> foo1 = ["c","d"] 
=> ["c", "d"] 
>> foo2 = ["e", "f"] 
=> ["e", "f"] 
>> h = Hash[foo0.zip(foo1, foo2)] 
=> {} 

我想這些壓縮,然後做一些事情,如:

h.each_pair do |letter0, letter1, letter2| 
    # process letter0, letter1 
end 

回答

1

目前尚不清楚您所期望的輸出是什麼,但Hash類的[]operator擬以偶數的參數,並返回一個新的哈希,每個偶數參數是對應奇數價值的關鍵。

例如,如果你介紹foo3 = ["d"]和你想獲得像{"a"=>"b", "c"=>"d"}哈希,你可以做到以下幾點:

>> Hash[*foo0.zip(foo1, foo2, foo3).flatten] 
=> {"a"=>"b", "c"=>"d"} 
0

Hash[]不起作用很喜歡你承擔。相反,試試這個:

>> Hash[*foo0, *foo1, *foo2] 
=> {"a"=>"b", "c"=>"d", "e"=>"f"} 

,或者我的首選方法:

>> Hash[*[foo0, foo1, foo2].flatten] 
=> {"a"=>"b", "c"=>"d", "e"=>"f"} 

基本上,Hash[]期待偶數的參數爲​​Hash[key1, val1, ...]。圖示運算符*正在將數組作爲參數應用。

0

它看起來像foo0.zip(foo1,foo2的)產生: [」 a「,」b「,」c「]]

這不是Hash []的可接受輸入。你需要傳遞一個平面數組。

0

你不需要爲你想實現什麼哈希,拉鍊會爲你

foo0.zip(foo1, foo2) do |f0, f1, f2| 
    #process stuff here 
end