h = { 'key1'=>'value1', 'key2'=>'value2', 'key3'=>'value3' }
array1 = ["my dog", "has", "fleas"]
array2 = ["my cat", "has", "9 lives"]
array3 = ["my pig", "--wait, I don't", "have a pig"]
array = [array1, array2, array3]
Есть много способов сделать это. Вот два. Обратите внимание, что все предполагают, что порядок ввода ключей в h
сохраняется, что происходит только в том случае, если вы используете Ruby v1.9 +. Более того, тип объекта (здесь массив), который вы добавляете к каждому значению хеша h
, не имеет значения. Это же решение применимо, если добавляемые объекты (элементы array
) представляют собой любые типы объектов (хеши, строки, символы, экземпляры классов, что угодно).
# 1: Использование Enumerable#zip
h.zip(array).each { |(k,v),a| h[k] = [v,a] }
h
#=> {"key1"=>["value1", ["my dog", "has", "fleas"]],
# "key2"=>["value2", ["my cat", "has", "9 lives"]],
# "key3"=>["value3", ["my pig", "--wait, I don't", "have a pig"]]}
# 2: Использование Hash#merge
Этот метод использует форму Hash#merge
, который использует хэш для определения значений ключей, которые присутствуют в оба хеша объединяются. Поскольку h
сливается с самим собой, блок вызывается для каждого ключа. Если вы хотите изменить h
на месте, вместо этого используйте Hash#merge! (aka update
).
a = array.dup
h.merge(h) { |_,v| [v, a.shift] }
#=> {"key1"=>["value1", ["my dog", "has", "fleas"]],
# "key2"=>["value2", ["my cat", "has", "9 lives"]],
# "key3"=>["value3", ["my pig", "--wait, I don't", "have a pig"]]}
Не могли бы вы поставить здесь свой код и задать точную проблему? –
Я бы просто хотел уточнить. В основном то, что вы хотите сделать, - это добавить содержимое массива к значениям, присвоенным ключу, например: '' key1 '=> [' value1 ', array1] 'или'' key1 '=> {' value1 '=>' array1 '} '? Это поможет нам лучше помочь :) –
Добро пожаловать в Stack Overflow. Пожалуйста, покажите нам, что вы пробовали. Нам проще, и лучше, чтобы мы исправили ваш код, чем нам писать что-то с нуля, и вы модифицируете его в свой старый код. Кроме того, ожидается, что вы покажете нам свою попытку, чтобы мы знали, что вы не просто ловите кого-то, чтобы написать код для вас. Кроме того, ваш 'h' не является хэшем, это фактически массив, состоящий из одного хэша, содержащего пары ключ/значение' key1' ... 'key10'. –