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

У меня есть 2 массива:

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

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

Спасибо


person kitch6041    schedule 30.05.2013    source источник
comment
Обратите внимание, что в массиве ключей есть два "l", а хэши не могут иметь повторяющихся ключей. Любое решение будет иметь либо "l" => "e", либо "l" => "l", но не оба. Что-то, о чем нужно знать, если у вас будут дубликаты в массиве, который становится ключами.   -  person Darshan Rivka Whittle    schedule 30.05.2013
comment
Спасибо, я очень новичок в программировании, и я ценю обратную связь.   -  person kitch6041    schedule 30.05.2013


Ответы (4)


В массиве ключей есть два "l", а хэши не могут иметь повторяющихся ключей. Любое решение будет иметь либо "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"}]
person Darshan Rivka Whittle    schedule 30.05.2013

Решение @RubyLovely - это то, как я бы это сделал, но для разнообразия вот еще одно решение:

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

Делая это таким образом, вам не нужно было бы создавать промежуточный массив, и, следовательно, это было бы более эффективно, чем это делать.

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

person    schedule
comment
вот еще один- 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"} - person Arup Rakshit; 30.05.2013
comment
@ kitch6041 То, что упомянул @@darshan, действительно, если у вас есть дубликаты ключей, вам нужно подумать о структуре данных, как бы вы ее представили. Если нет, то, если хотите, можете пойти и с моим решением, пока есть несколько правильных ответов. Какой из них соответствует вашим потребностям, примите его. :) - person Arup Rakshit; 30.05.2013