我有一个大型csv文件,格式如下: -
ID,Hash
abc,123
def,456
ghij,7890
我想有效地读取与给定ID相对应的行并对相应的散列进行更改。我被允许在初始传递中存储一些信息,但更改需要是动态的。我该怎么办?
我不想在进行更改时迭代所有行。一般来说,不能对任何条目的大小做出任何假设。它也可能会改变。文件没有订单。
这看起来很难,但请提供一些代码,我可以在一段时间内访问文件的某些部分。我想我可以想出一个启发式的。如果地址可以从给定点在两个方向上迭代,那将是最好的。
答案 0 :(得分:-1)
Michael Walz问" 散列是否有固定的大小?答案在很大程度上取决于此。如果大小是固定的,那么直接在文件中更新哈希很容易,否则必须读取并重写文件"。
更一般地说,如果文件中的记录具有固定长度,那么您可以寻找记录并替换它。如果没有,您必须假脱机文件。假设固定长度,如果文件有例如,您可以进行可能的搜索过程。一个订单(已排序),然后您可以使用二进制搜索快速(O(日志N))找到记录。
请参阅Klas Lindbach在Fastest array lookup algorithm in C for embedded system?的基本二进制搜索解决方案。同样的想法适用于文件(记录数组,但在磁盘上)。