2013-07-11 3 views
0

У меня возникают проблемы с созданием хэша из 2 массивов, когда значения одинаковы в одном из массивов. , например.Создание хэша из двух массивов с одинаковыми значениями в Ruby

names = ["test1", "test2"] 
numbers = ["1", "2"] 
Hash[names.zip(numbers)] 

работает отлично это дает мне именно то, что мне нужно => {"test1"=>"1", "test2"=>"2"}

Однако, если значения в «именах» идентичны, то он не работает правильно

names = ["test1", "test1"] 
numbers = ["1", "2"] 
Hash[names.zip(numbers)] 

показывает {"test1"=>"2"} однако я ожидаю результат будет {"test1"=>"1", "test1"=>"2"}

Любая помощь с благодарностью

ответ

3

Хэши не могут иметь дубликаты ключей. Когда-либо.

Если бы они были разрешены, как бы вы получили доступ к «2»? Если вы напишете myhash["test1"], какое значение вы ожидаете?

Скорее, если вы ожидаете иметь несколько значений под одним ключом, сделайте хэш массивов.

names = ["test1", "test1", "test2"] 
numbers = ["1", "2", "3"] 

Hash.new.tap { |h| names.zip(numbers).each { |k, v| (h[k] ||= []) << v } } 
# => {"test1"=>["1", "2"], "test2"=>["3"]} 
+0

Спасибо. Я чувствую смущение отсутствием этой части. Все, что я хотел сделать, это перебрать массив. В конце концов сделал что-то вроде этого. 'names.zip (числа) .each_with_index do | (имя, номер), i |' – sylvian

+0

'keys.zip (значения) .each_with_object ({}) {| (k, v), h | h.update ({k => [v]}) {| _, ov, _ | ov << v}} '- это еще один способ сделать то же самое. –

Смежные вопросы