2013-05-30 2 views
1

У меня есть 2 массивов:Как превратить массив в ключи хеша и другого массива в значения одного и того же хэша?

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

Я хочу Array1 элементы, чтобы стать ключом в новом Hash и элементы array2 стать соответствующими значениями в том же Hash. Может кто-нибудь предложить, как это сделать?

Благодаря

+0

Обратите внимание, что в массиве «ключ» есть два '' l '' 's, в то время как хэши не могут иметь дублирующие ключи. Любое решение будет иметь либо «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"} 
Смежные вопросы