新手问题 有关 Hash 的使用问题

ziu · 2014年07月02日 · 最后由 ziu 回复于 2014年07月03日 · 1845 次阅读

正在使用roo来处理 excel 表格 (主要是统计里边的工时),现在想建一个 hash 表,关键字是参与过的项目,值是一个数组,数组中按下标对应了其每个月在该项目上所花的工时 如"xx web design => [0,2,3,10,12]" 就表明了在该人参与了xx web design的项目,并且在1,2,3,4,5月份花在这项目上的工时分别为0,2,3,10,12.

weeks=Hash.new(Array.new(26){|i| i*0 }) 这样声明了 hash 表,不清楚这样是否正确,但后来改之后还是有问题,下面叙述

project.each do |_p|  ##project 存储了改人所参与过的所有项目,没有重复的条目

 p  _p  ##debug 看的
 p weeks[_p]
 ##
 for i in .....  #遍历excel行
   if s.cell(i,5)==_p #选择与项目名称一致的
#blah,....
#计算工时

 ##

  weeks[_p][week-1]=  weeks[_p][week-1]+sum  #week是上边计算得到的周数,sum是该周的工时

 end
end

奇怪的是对第一轮计算完后,即到了下一个_p 时,weeks[_p] 并不是初始化的全零数,而是第一轮的结果,而后结果就全错了。 我试着在project.each do |_p|之下紧接着再把_p对应的数组清零一次,如:

project.each do |_p| 
p _p
p weeks[_p]
weeks[_p].each_index do |i|
    weeks[_p][i]==0
end
p "clear", weeks[_p]

无果,clear之后的weeks[_p]与之前一样,是上一个_p的运算结果(其对应的数组)。

请问这是为什么?

十分感谢。

LZ 的代码不够 Ruby Style, 看着有点难受。

建议 LZ 可以用 binding pry 去 debug。 https://github.com/pry/pry

#1 楼 @springwq 我是想先保证程序能正确运行再改结构,调优什么的。pry用过,不太顺手,debug 进去之后貌似会卡住,要不然就会重复再同一个语句上。我在程序里把关键的变量print出来了,大概也能调一下

需要 登录 后方可回复, 如果你还没有账号请 注册新账号