2015-04-28 191 views
0

所以我寫了一個代碼遍歷數百個CSV文件,然後將每個元素的最後一個元素存儲到一個新數組中。永久存儲數組Ruby

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

這取決於你想要結果的持久性。如果你不想在你的程序的生命週期中解析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 

如果你想你的工作要保存的程序,你可以嘗試保存你的結果(單個)文件和回讀,使用或許以下的執行在兩者之間:

+0

元帥的缺點之一是爲這樣的事情一個糟糕的選擇。二進制格式依賴於Ruby版本,無法讀取與Ruby版本不匹配的格式。 –