我有一个包含数百万条记录的 csv 文件,其中包含一个 ID 列、日期列等。我让你从输入文件中读取每条记录,比如 file1 n 放入一个列表中,在插入时我需要检查该特定 ID 是否已经存在如果是,则列表将日期替换为 file1 中的新日期。
这可以通过二进制搜索(List.BinarySearch)(C#)来完成。但是由于文件很大,我认为这将是一个乏味的过程。有什么替代方法。我怎样才能以有效的方式做到这一点
谢谢
我有一个包含数百万条记录的 csv 文件,其中包含一个 ID 列、日期列等。我让你从输入文件中读取每条记录,比如 file1 n 放入一个列表中,在插入时我需要检查该特定 ID 是否已经存在如果是,则列表将日期替换为 file1 中的新日期。
这可以通过二进制搜索(List.BinarySearch)(C#)来完成。但是由于文件很大,我认为这将是一个乏味的过程。有什么替代方法。我怎样才能以有效的方式做到这一点
谢谢
将它们添加到HashSet<T>
.
HashSet 可以进行有效的搜索并覆盖重复项,这正是您想要的。
您将需要管理您的项目的平等。
您可以维护Dictionary<TKey, TValue>
whereTKey
将是存储在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)
肯定是一个很好的开始。但我不知道数据库是否是这个任务的一个选项?