2013-05-30 224 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"}