0

我有一个包含数百万条记录的 csv 文件,其中包含一个 ID 列、日期列等。我让你从输入文件中读取每条记录,比如 file1 n 放入一个列表中,在插入时我需要检查该特定 ID 是否已经存在如果是,则列表将日期替换为 file1 中的新日期。

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

谢谢

4

3 回答 3

4

将它们添加到HashSet<T>.

HashSet 可以进行有效的搜索并覆盖重复项,这正是您想要的。
您将需要管理您的项目的平等

于 2014-04-04T08:28:09.827 回答
1

您可以维护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;
}
于 2014-04-04T09:15:36.253 回答
0

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

于 2014-04-04T08:26:39.130 回答