1

我有 2 个数组:

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

我希望array1 元素成为新哈希中的键,而array2 元素成为同一哈希中的对应值。有人可以建议如何做到这一点吗?

谢谢

4

4 回答 4

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"}
于 2013-05-30T19:11:18.287 回答
0

这样做,您不需要创建中间数组,因此会比这样做更有效。

h = {}
array1.zip(array2){|k, v| h[k] = v}
h # => {"H"=>"o", "e"=>"l", "l"=>"e", "o"=>"H"}
于 2013-05-31T00:12:36.287 回答
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"} 
于 2013-05-30T19:32:33.650 回答
0

“key”数组中有两个"l"s,而Hashes不能有重复的key。任何解决方案都将具有"l" => "e""l" => "l",但不能同时具有。如果没关系,那么@RubyLovely 的解决方案很棒。如果您想为每对保留一个映射,则 Array of Hashes 可能是合适的:

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"}]
于 2013-05-30T19:24:12.637 回答