Вы можете использовать ||=
оператор, который делает именно то, что вы хотите
my_hash[key] ||= {}
Остальная часть моего ответа здесь, потому что я не уверен, что такое «коллекция хэшей», поэтому я думаю, что это будет массив хэшей. Если я не прав, дайте мне знать и не обращайте внимания на остальную часть этого ответа.
Кажется, что остальная часть вашего метода может не делать то, что звучит так, как будто вы пытаетесь это сделать. Рассмотрим:
@collection_of_hashes = [{foo: 'bar'}, {baz: 'qux'}]
def create_a_hash_from_a_collection
my_hash = {}
@collection_of_hashes.each do |key, value|
# this is not actually doing anything here and returns same with or
# without the following line
# my_hash[key] ||= {}
my_hash[key] = value
end
my_hash
end
#=> {{:foo=>"bar"}=>nil, {:baz=>"qux"}=>nil}
Но что вы, вероятно, хотите, это
def create_a_hash_from_a_collection
my_hash = {}
@collection_of_hashes.each do |hash|
hash.keys.each do |k|
my_hash[k] = hash[k]
end
end
my_hash
end
#=> {:foo=>"bar", :baz=>"qux"}
Но также имейте в виду, если любая из ваших "коллекций хешей", которые мы склонны считать массивом хешей, содержит тот же ключ, который выигрывает? Этот код, это будет последний элемент в значении ключа массива. Какова реальная цель вашего метода?