永久存储数组Ruby

时间:2015-04-28 04:12:56

标签: ruby arrays

所以我编写了一个代码,遍历数百个CSV文件,然后将每个文件的最后一个元素存储到一个新数组中。

 module Example
   @array = []
   def example(file_names) #where file_names is an array of strings for the csv files
     file_names.each { |x|
       @array << (CSV.parse open("#{x}.csv").read)[-1] if File.exists?("{x}.csv") == true }
     return @array
   end
 end

执行此代码可能需要一些时间,我希望能够在其他方法中引用这个新创建的数组,而无需再次运行此代码。有没有办法永久存储@array变量?

1 个答案:

答案 0 :(得分:1)

这取决于您希望结果的永久性。如果您只是不想在程序的生命周期内解析CSV文件,那么您只需将结果缓存到成员变量中(就像使用@array一样),并且只有在该数组为空时才执行代码。例如:

module Example       
    def example(file_names)
        # ||= will only calculate a result if @array is nil, otherwise
        # it will return the saved value
        @array ||= file_names.map { |x| CSV.parse open("#{x}.csv").read)[-1] if File.exists?("{x}.csv") }
    end
 end

如果您希望在程序执行之间保存您的工作,您可以尝试将结果保存到(单个)文件并使用以下内容将其读回: