2013-05-30 238 views
1

我有2個數組:如何將一個數組轉換爲哈希鍵和另一個數組轉換爲相同哈希的值?

array1 = ["H", "e", "l", "l", "o"] 
array2 = ["o", "l", "l", "e", "H"] 

我希望ARRAY1元件成爲一個新的散列密鑰,和數組2元件成爲相同的哈希相應的值。有人可以建議如何做到這一點?

感謝

+0

請注意,「key」數組中有兩個「l」,而Hashes不能有重複的鍵。任何解決方案將具有「l」=>「e」或「l」=>「l」',但不是兩者都有。有些事情要注意,如果你將在數組中有成爲鍵的副本。 –

+0

謝謝,我對編程非常陌生,我很欣賞反饋。 – kitch6041

回答

4
array1 = ["H", "e", "l", "l", "o"] 
array2 = ["o", "l", "l", "e", "H"] 
p Hash[array1.zip(array2)] 
# >> {"H"=>"o", "e"=>"l", "l"=>"e", "o"=>"H"} 
+0

這裏是另一個array1 = [「H」,「e」,「k」,「l」,「o」] array2 = [「o」,「l」,「l」,「e」, 「H」] p Hash [array1.zip(array2)] #>> {「H」=>「o」,「e」=>「l」,「k」=>「l」,「l」 =>「e」,「o」=>「H」}' –

+0

乾杯,感謝您的幫助。 – kitch6041

+0

@ kitch6041 @@ darshan提到的是有效的,如果你有重複的鍵,那麼你需要考慮數據結構,你將如何表示它。如果不是那麼,如果你想要的話,也可以用我的解決方案,而有幾個正確的答案。哪一個適合你的需要接受它。 :) –

0

有兩個"l" S中的「關鍵」陣列中,而哈希值不能有重複鍵。任何解決方案將有"l" => "e""l" => "l",但不是兩者都有。如果沒關係,那麼@ RubyLovely的解決方案非常棒。如果你想保持每對的映射,哈希的數組可能是適當的:

array1 = ["H", "e", "l", "l", "o"] 
array2 = ["o", "l", "l", "e", "H"] 
array1.zip(array2).map{|pair| Hash[*pair]} 
# => [{"H"=>"o"}, {"e"=>"l"}, {"l"=>"l"}, {"l"=>"e"}, {"o"=>"H"}] 
0

通過@RubyLovely解決的辦法是我會怎麼做,但對於各種這裏的目的是另一種解決方案:

array1.each_with_index.reduce({}) do |memo,(x,i)| 
    memo[x] = array2[i]; memo 
end 
# => {"H"=>"o", "e"=>"l", "l"=>"e", "o"=>"H"} 
0

這樣做,你不需要創建一箇中間數組,因此會比這樣做更有效。

h = {} 
array1.zip(array2){|k, v| h[k] = v} 
h # => {"H"=>"o", "e"=>"l", "l"=>"e", "o"=>"H"}