我有一个csv文件,其中包含一个ID列,日期列等万元记录。我有你从输入文件中读取每个记录说file1ñ放入列表,同时插入我需要检查,如果该特定ID存在已经在列表中,如果是,则用file1中的新日期替换日期。替代二进制搜索在C#中搜索一百万条记录CSV?
这可以通过二进制搜索(List.BinarySearch)(C#)来完成。但是由于文件尺寸较大,我认为这将是乏味process.What是alternative.How我可以在有效的方式
做到这一点谢谢
我有一个csv文件,其中包含一个ID列,日期列等万元记录。我有你从输入文件中读取每个记录说file1ñ放入列表,同时插入我需要检查,如果该特定ID存在已经在列表中,如果是,则用file1中的新日期替换日期。替代二进制搜索在C#中搜索一百万条记录CSV?
这可以通过二进制搜索(List.BinarySearch)(C#)来完成。但是由于文件尺寸较大,我认为这将是乏味process.What是alternative.How我可以在有效的方式
做到这一点谢谢
您可以维持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;
}
您是否考虑将此列表导入数据库表并通过SQL查询执行所述过滤? 从我看到的地方来看,它可能不会太复杂,在所有字段上分组并选择max(yourdate)
肯定会是一个非常好的开始。 但我不知道数据库是否是这个任务的一个选项?
将它们添加到HashSet<T>
。
HashSet能够高效地搜索并覆盖重复项,正是您想要的。
您将需要manage the Equality您的项目。
不存在对数据库的选项。 :( – user1942809