繁体   English   中英

如何将数组转换为Hash和另一个数组的键到同一个哈希的值?

[英]How to turn an array into the keys of a Hash and another array into the values of the same hash?

我有2个数组:

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

我希望array1元素成为新Hash中的键,并且array2元素成为同一Hash中的对应值。 有人可以建议怎么做吗?

谢谢

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"}

“key”数组中有两个"l" ,而Hashes不能有重复的键。 任何解决方案都将具有"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"}]

@RubyLovely的解决方案是我如何做到的,但为了多样性,这里是另一个解决方案:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM