在准备处理大量数据时,我会在处理之前执行一些清理和修剪操作。我的代码功能很好,但是当我在数百万点上执行此操作时,我担心这些操作会如何扩展。我的代码感觉效率低下,但我不知道如何简化我的步骤。
在我的过程中,我解析一个CSV文件,检查垃圾数据,即非数值,将剩余数据类型化为浮点数,然后对其进行排序。我希望在可能的情况下就如何改进这一点提供一些指导。
require 'green_shoes'
require 'csv'
class String
def valid_float?
true if Float self rescue false
end
end
puts "Parsing..."
temp_file = ask_open_file("")
temp_arr = CSV.read(temp_file)
temp_arr.each do |temp_row|
temp_row.map!{ |x| !x.valid_float? ? 0 : x }
temp_row.map!{ |x| x.to_f}
temp_row.sort!
end
答案 0 :(得分:0)
我的猜测是你想要在完成后返回文件内容,对吧?如果是这样,您希望map
使用temp_arr
,而不是each
。
您可以通过将前两行组合在一起来保存迭代:
temp_arr.map! do |temp_row|
temp_row.map!{ |x| x.valid_float? ? x.to_f : 0.0 }
temp_row.sort!
end