我有一个类似的问题需要解决,农药分析结果以异构(糟糕的设计!)格式进入系统...负整数作为特殊代码(未检测、未测试、未定量等),
nil
作为未检测的同义词,浮点数用于定量化合物,字符串用于通过/失败的
布尔值...等等。请稍等,这是一个在生产中运行了10年的高度修补的老应用程序,从未进行过
绿地开发 ;)
两个我从顶级Ruby程序员那里学到的东西:
0) 不要迭代修改可枚举对象(返回副本)
1) 你的正则表达式不会涵盖所有情况
虽然我不是
rescue
的铁杆粉丝,但我认为它适用于保持代码清洁的目的。因此,我一直在使用它来缓解我的输入:
ha = {
"p_permethrin" => nil,
"p_acequinocyl"=>"0.124",
"p_captan"=>"2.12",
"p_cypermethrin"=>"-6",
"p_cyfluthrin"=>"-6",
"p_fenhexamid"=>"-1",
"p_spinetoram"=>"-6",
"p_pentachloronitrobenzene"=>"-6",
"p_zpass"=>"true"
}
Hash[ha.map{|k,v| [k, (Float(v) rescue v)]}]
Hash[ha.map{|k,v| [k, (Float(v) rescue v.to_s)]}]
我甚至会
class Hash
def evaluate_values
Hash[self.map{|k,v| [k, (Float(v) rescue v)]}]
end
end