所以我编写了一个代码,遍历数百个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变量?
答案 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
如果您希望在程序执行之间保存您的工作,您可以尝试将结果保存到(单个)文件并使用以下内容将其读回: