首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在具有奇怪行为的循环中创建哈希

在具有奇怪行为的循环中创建哈希
EN

Stack Overflow用户
提问于 2017-05-09 13:06:28
回答 1查看 44关注 0票数 0

这是我的代码,我尝试创建一个哈希,头作为键,哈希数组的值,但结果不保留一个又一个循环的数据,相反,结果键工作正常。

代码语言:javascript
运行
复制
  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

第一次迭代:

代码语言:javascript
运行
复制
[1] pry(#<Programacao>)> result
=> {}

但结果是

代码语言:javascript
运行
复制
[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"}]

第二次迭代:

代码语言:javascript
运行
复制
[1] pry(#<Programacao>)> result
=> {}

集箱钢厂正常

代码语言:javascript
运行
复制
[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"}]

我的错误在哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-09 14:13:30

我不完全理解你的问题,因为你没有提供最小、完整和可验证的示例。( csv_each_for是什么?file_to是什么?你的输入CSV是什么?如果没有必要提供所有这些信息,那么可以提供一个最小的示例吗?)

不过,我相信你问题的症结在于:

代码语言:javascript
运行
复制
result = Hash.new([])

相反,您应该使用:

代码语言:javascript
运行
复制
result = Hash.new { |hash, key| hash[key] = [] }

这是因为,正如红宝石医生中提到的,每次都需要创建一个新的默认对象。

这是一个通病。正是因为这个错误,你才看到了奇怪的行为,其中result == {}但是result[something] == [{:horario=>"09:00 - 9:50", ...}]

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43870697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档