二叉搜索的替代方法,用于在 C# 中搜索一百万条记录 CSV
本文关键字:搜索 一百万 记录 CSV 方法 用于 | 更新日期: 2023-09-27 17:56:29
我有一个包含百万条记录的csv文件,该文件由ID列,日期列等组成。我从输入文件中读取了每条记录,例如将file1 n放入列表中,在插入时,我需要检查该特定ID是否已存在于列表中,如果是,则用文件1中的新日期替换日期。
这可以通过二进制搜索(List.BinarySearch)(C#)来完成,但由于文件大小很大,我认为这将是一个乏味的过程。什么是替代方案。我怎样才能以有效的方式做到这一点
谢谢
将它们
添加到HashSet<T>
中。
HashSet 可以进行有效的搜索并覆盖重复项,这正是您想要的。
您将需要管理项目的平等性。
您可以维护一个Dictionary<TKey, TValue>
其中TKey
是存储在ID
列中的值的类型,TValue
是特定记录的类型(您可以定义一个包含字段的类,csv 中的每一列对应一个字段)。
然后,只需根据新记录所属的ID
键将新记录分配给字典即可。通过这种方式,您可以确保所有键在字典中都有更新的记录(其中还有日期时间)。它确实也很省时。
下面是一个示例代码:
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)
肯定是一个很好的开始。但我不知道数据库是否是此任务的一个选项?