我有一个类似的问题要解决,其中农药分析的结果以异构(糟糕的设计!)格式进入系统......负整数作为特殊代码(未检测,未测试,未量化等......),nil
如未检测到的同义词,用于量化化合物的浮点数和用于通过/失败布尔值的字符串...保持你的马,这是一个 10 年的生产运行,从未经过绿地开发的高度修补的应用程序;)
我从顶级 rubists 那里学到了两件事:
0) DON'T ITERATE-MODIFY AN ENUMERABLE (return a copy)
1) YOUR REGEX WON'T COVER ALL CASES
虽然我不是 . 的忠实粉丝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)]}] # allows nil
Hash[ha.map{|k,v| [k, (Float(v) rescue v.to_s)]}] # nit to empty string
我什至会
class Hash
# return a copy of the hash, where values are evaluated as Integer and Float
def evaluate_values
Hash[self.map{|k,v| [k, (Float(v) rescue v)]}]
end
end