0
我有一個CSV文件中的列,Original.csv
,其中有一堆用戶ID,其中有些重複,像以下:爲什麼哈希內容沒有被保存到CSV文件中?
udid
d0155049772de9
8b57d8c7f1e5a31e4adaef5fe6c52df1ada7fcd5
8b57d8c7f1e5a31e4adaef5fe6c52df1ada7fcd5
465088425ceb38c62bf8d1d9cc33bcfab4fe4293
3eabe40461773086
3eabe40461773086
e24356719f086021
212b5b0415560be3
1c046451a3761ef51fbf52759748f66c98b02313
我想以後處理它們在MATLAB,所以我想哈希並將它們轉換爲整數並將它們存儲在一個新文件中,New.csv
。這是我的代碼:
require 'csv'
udids = []
id=[]
CSV.foreach('Original.csv', :headers=>true).map do |row|
udids << row[0]
end
udids=udids.uniq
arrayHash=[]
for i in 0..udids.size-1
arrayHash<<udids
arrayHash<<i
end
hash = Hash[arrayHash.each_slice(2).to_a]
id=hash.values_at *udids
for i in 0..id.size-1
logfile = File.new('New.csv',"w")
logfile.print("#{id[i]}\n")
logfile.close
end
由於某種原因,我沒有能夠搞清楚,該New.csv
文件正在運行的代碼之後空。有什麼問題?
編輯:這個程序的散列執行速度比簡單地比較和檢查用戶標識之前是否重複過嗎?像這樣:
CSV.open('New.csv', "wb") do |csv|
CSV.foreach('Original.csv', :headers=>true).map do |row|
unless udids.include?(row[0])
udids << row[0]
end
csv<<udids.index(row[56]) + 1
end
end
在這兩種情況下,你能否說出爲什麼一個人會比另一個更快地執行?如果有問題,我的CSV有6000萬條記錄。
要覆蓋在每個循環迭代的文件。 – Meier
找到一個散列元素會更快,然後找到數組元素,特別是60萬行。但將整個散列保存在內存中可能是一個問題。 – Meier
如果你寫udids.include?它會比較你的元素和6000萬個元素。如果你這樣做6000萬次,你就死了。 – Meier