为什么散列内容未保存到CSV文件中?

我在CSV文件中有一个专栏, Original.csv ,它有一堆用户ID,其中一些重复,如下所示:

 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文件为空。 有什么问题?

编辑:此程序的哈希执行速度是否比简单地比较和检查之前是否重复用户ID更快? 像这样的东西:

 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万条记录。

无需深入了解完整代码:

 for i in 0..id.size-1 logfile = File.new('New.csv',"w") logfile.print("#{id[i]}\n") logfile.close end 

您打开文件id.size-1次,写一行并关闭它。 最后,您有最后一个条目的文件。

看来你想要这样的东西

  File.open('New.csv',"w") do |logfile| #Open the file id.each{|one_id| #loop on all ids logfile.print("#{one_id}\n") #write one id in line } end #Close the file