Ruby阵列操作:提高效率

时间:2016-06-08 03:51:06

标签: ruby

在准备处理大量数据时,我会在处理之前执行一些清理和修剪操作。我的代码功能很好,但是当我在数百万点上执行此操作时,我担心这些操作会如何扩展。我的代码感觉效率低下,但我不知道如何简化我的步骤。
在我的过程中,我解析一个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

1 个答案:

答案 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