2014-04-04 65 views
0

我有一个csv文件,其中包含一个ID列,日期列等万元记录。我有你从输入文件中读取每个记录说file1ñ放入列表,同时插入我需要检查,如果该特定ID存在已经在列表中,如果是,则用file1中的新日期替换日期。替代二进制搜索在C#中搜索一百万条记录CSV?

这可以通过二进制搜索(List.BinarySearch)(C#)来完成。但是由于文件尺寸较大,我认为这将是乏味process.What是alternative.How我可以在有效的方式

做到这一点

谢谢

回答

1

您可以维持Dictionary<TKey, TValue>其中TKey将存储在ID柱和TValue将是一个特定的记录的类型的值的类型(可以定义一个类,将包含的字段,一个用于在每列CSV)。

然后,只需将新记录分配给字典,即与其所属的密钥ID相对应。 通过这种方式,您可以确保所有键在字典中都有更新记录(也包括这些记录中的DateTime)。实际上它也是时间效率高的。

下面是一个例子代码:

public class Record // this class represents a particular record in the csv 
{ 
    public int ID { get; set; } 
    public DateTime DateTime { get; set; } 
    // other columns like above 
} 

然后在客户端代码:

Dictionary<int, Record> dictionaryIdRecord = new Dictionary<int, Record>(); 

// `records` is the List of <Record>s in the csv 
foreach (Record record in records) 
{ 
    dictionaryIdRecord[record.ID] = record; 
} 
0

您是否考虑将此列表导入数据库表并通过SQL查询执行所述过滤? 从我看到的地方来看,它可能不会太复杂,在所有字段上分组并选择max(yourdate)肯定会是一个非常好的开始。 但我不知道数据库是否是这个任务的一个选项?

+0

不存在对数据库的选项。 :( – user1942809

4

将它们添加到HashSet<T>

HashSet能够高效地搜索并覆盖重复项,正是您想要的。
您将需要manage the Equality您的项目。