二叉搜索的替代方法,用于在 C# 中搜索一百万条记录 CSV

本文关键字:搜索 一百万 记录 CSV 方法 用于 | 更新日期: 2023-09-27 17:56:29

我有一个包含百万条记录的csv文件,该文件由ID列,日期列等组成。我从输入文件中读取了每条记录,例如将file1 n放入列表中,在插入时,我需要检查该特定ID是否已存在于列表中,如果是,则用文件1中的新日期替换日期。

这可以通过二进制搜索(List.BinarySearch)(C#)来完成,但由于文件大小很大,我认为这将是一个乏味的过程。什么是替代方案。我怎样才能以有效的方式做到这一点

谢谢

二叉搜索的替代方法,用于在 C# 中搜索一百万条记录 CSV

将它们

添加到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)肯定是一个很好的开始。但我不知道数据库是否是此任务的一个选项?