这是我的代码,我尝试创建一个哈希,头作为键,哈希数组的值,但结果不保留一个又一个循环的数据,相反,结果键工作正常。
def programacao
result = Hash.new([])
header = nil
csv_each_for(file_to('programacao/9')).each do |row|
next if row[0].nil?
if row[0].start_with?('#')
header = row[0]
next
end
# puts "HEADER #{header} / ROW: #{row[0]}"
result[header] << ({
horario: row[0],
evento: row[1],
tema: row[2],
palestante: row[3],
instituicao: row[4],
local: row[5]
})
binding.pry
end
result
end第一次迭代:
[1] pry(#<Programacao>)> result
=> {}但结果是
[3] pry(#<Programacao>)> result[header]
=> [{:horario=>"09:00 - 9:50",
:evento=>"Palestra",
:tema=>"Reforma da Previdência",
:palestante=>"Dr. Álvaro Mattos Cunha Neto",
:instituicao=>"Advogado - Presidente da Comissão de Direito Previdenciário",
:local=>"OAB"}]第二次迭代:
[1] pry(#<Programacao>)> result
=> {}集箱钢厂正常
[2] pry(#<Programacao>)> result[header]
=> [{:horario=>"09:00 - 9:50",
:evento=>"Palestra",
:tema=>"Reforma da Previdência",
:palestante=>"Dr. Álvaro Mattos Cunha Neto",
:instituicao=>"Advogado - Presidente da Comissão de Direito Previdenciário",
:local=>"OAB"},
{:horario=>"9:00 -10:00", :evento=>"Solenidade de abertura do Estande", :tema=>nil, :palestante=>"Direção/Coordenações", :instituicao=>nil, :local=>"Faculdade Católica do Tocantins"}]我的错误在哪里?
发布于 2017-05-09 14:13:30
我不完全理解你的问题,因为你没有提供最小、完整和可验证的示例。( csv_each_for是什么?file_to是什么?你的输入CSV是什么?如果没有必要提供所有这些信息,那么可以提供一个最小的示例吗?)
不过,我相信你问题的症结在于:
result = Hash.new([])相反,您应该使用:
result = Hash.new { |hash, key| hash[key] = [] }这是因为,正如红宝石医生中提到的,每次都需要创建一个新的默认对象。
这是一个通病。正是因为这个错误,你才看到了奇怪的行为,其中result == {}但是result[something] == [{:horario=>"09:00 - 9:50", ...}]。
https://stackoverflow.com/questions/43870697
复制相似问题