我有2个数组:如何将一个数组转换为哈希键和另一个数组转换为相同哈希的值?
array1 = ["H", "e", "l", "l", "o"]
array2 = ["o", "l", "l", "e", "H"]
我希望ARRAY1元件成为一个新的散列密钥,和数组2元件成为相同的哈希相应的值。有人可以建议如何做到这一点?
感谢
我有2个数组:如何将一个数组转换为哈希键和另一个数组转换为相同哈希的值?
array1 = ["H", "e", "l", "l", "o"]
array2 = ["o", "l", "l", "e", "H"]
我希望ARRAY1元件成为一个新的散列密钥,和数组2元件成为相同的哈希相应的值。有人可以建议如何做到这一点?
感谢
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"}
这里是另一个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”}' –
干杯,感谢您的帮助。 – kitch6041
@ kitch6041 @@ darshan提到的是有效的,如果你有重复的键,那么你需要考虑数据结构,你将如何表示它。如果不是那么,如果你想要的话,也可以用我的解决方案,而有几个正确的答案。哪一个适合你的需要接受它。 :) –
有两个"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"}]
通过@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"}
请注意,“key”数组中有两个“l”,而Hashes不能有重复的键。任何解决方案将具有“l”=>“e”或“l”=>“l”',但不是两者都有。有些事情要注意,如果你将在数组中有成为键的副本。 –
谢谢,我对编程非常陌生,我很欣赏反馈。 – kitch6041